Mat*_*hew 4 mod-rewrite apache2 query-string
我正在使用Apache2和mod_rewrite来隐藏我的查询字符串.这些是有问题的规则.
RewriteCond %{QUERY_STRING} ^query=(.*)$
RewriteRule (.*) /search/%1 [R=301,L]
RewriteRule ^search\/?$ /search/?query=test [R=301,L]
Run Code Online (Sandbox Code Playgroud)
当我访问/search(或/search/)时,我被正确地重定向到/search/?query=test(根据最后的规则)
从那里,RewriteCond而RewriteRule应该踢在和重定向我/search/test,对不对?据我了解了%1我的第一个RewriteRule对应于(.*)在RewriteCond其中应该包含test.
然而,实际发生的是我被重定向到/search/test/?query=test.因此,该规则有效,但由于某种原因附加了查询字符串.QSA选项是以某种方式/某处自动添加的吗?
然后我陷入了一个无限循环的重定向,/search/test?query=test因为第一个RewriteCond又RewriteRule重新启动,再一次又一次......
我究竟做错了什么?!
谢谢!
Gum*_*mbo 11
您需要在替换中指定一个空查询,以防止将原始请求的查询附加到新URL:
修改查询字符串
默认情况下,查询字符串将保持不变.但是,您可以在包含查询字符串部分的替换字符串中创建URL.只需在替换字符串中使用问号,即表示应将以下文本重新注入查询字符串.如果要删除现有查询字符串,请仅使用问号结束替换字符串.要组合新旧查询字符串,请使用[QSA]标志.
所以:
RewriteCond %{QUERY_STRING} ^query=(.*)$
RewriteRule (.*) /search/%1? [R=301,L]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2463 次 |
| 最近记录: |