QSA'(追加查询字符串)qsappend|QSA'(追加查询字符串)
此标记强制重写引擎在已有的替换字符串中追加一个查询字符串,而不是简单的替换。如果需要通过重写规则在请求串中增加信息,就可以使用这个标记。
意思是强制追加参数!看来手册仍要好好看!
下面是我goolge的内容,也贴在这里了!
今天碰到了一个Apache的重写url的问题,需求是这样的,把
/abc/hello.html?page=2
rewrite成
/search.php?key=hello&page=2
我自己尝试写规则如下
^abc/(.+)\.html\?page=([0-9]+)$ /search.php/?key=$1&page=$2
这个规则怎么尝试都无法成功,就是不能匹配上那个问号.
实在搞不定只好利用网络请教高手了,记录过程如下
1.先到我加的几个qq群里问,自认为这种方式较快,因为这些qq群在线都是好几十人,随便碰到个会的就帮我搞定了.结果让我很失望,发了4个qq群,只有一个群里得到了答复,而且答案跟我的写法一样.
2.到百度知道提问,一个小时后得到一个答复跟我自己写的一样,仍然没搞定.
3.到国内一个很大的论坛发贴求助,只有一个人答复 "你悬偿点分嘛..重赏之下,必有勇夫",我以为帮助别人即使没有所谓的"分"也很快乐.
4.转战国外论坛,在webmasterworld以interrogation rewrite 为关键字搜索到了www.webmasterworld.com/apache/3375528.htm,虽然没有找到我要的答案,但是知道了apache的rewrite有个叫query_string的东西
5.在百度以关键词query string rewrite搜索到了我想要的结果http://stauren.net/log/4b8atjdnw.html
说白了就是一个参数的问题那就是[L,QSA]
摘抄一段那位网友的文章
<IfModule mod_rewrite.c>
RewriteEngine on
# Rewrite current-style URLs of the form 'index.php?q=x'.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
</IfModule>
第1行: 如果服务器加载了rewrite模块,则执行如下规则
第2行: 打开改写引擎,不用动,加上就好。
第3行: 注释
第4行: RewriteCond
表示这是应用改写规则的条件,%{REQUEST_FILENAME}表示对请求的文件完整url进行判断,-f是表示这是普通文件,!表示非。这句的意思就是,如果请求的不是普通文件,则对url进行改写。
第5行: 基本同第4行,-d的意思是文件夹
第 6行:RewriteRule 表示这是改写规则,^(.*)$是一个正则,表示整个请求的url(在RewriteBase
之后的),index.php?q=$1是改写的样式。这里可能需要对正则熟一点才能看懂了。最后的[L,QSA]是flag,标志。L表示是last,针对这个url的最后一次改写,不再应用其他rule,QSA表示query
string append,将查询字串加入原有查询字串之后。
一点感慨,国内的论坛交流分享的氛围远远不及国外的论坛,看看webmasterworld的回帖基本上就是一篇文章.
想到了一个小笑话:
一日早朝,王安石出列:“臣有奏,OOXX(以下省略1万字)。”刚说完身后跪下一片叫到:“臣沙发”“臣板凳”“臣地板”“臣顶”“臣也顶”……最后几人面带笑容不语,神宗见状怒击龙椅:“不许纯表情回帖。”
本文永久链接: http://www.zzxj.net/blog/fxs_2008/archive/2009/10/06/63.html
发表于 @ 2009年10月06日 |评论(loading... )|收藏