Mod rewrite 如何关闭QSA?(查询字符串追加)
我使用Apache2和mod_rewrite来隐藏我的查询字符串。这些是有问题的规则Mod rewrite 如何关闭QSA?(查询字符串追加),mod-rewrite,apache2,query-string,Mod Rewrite,Apache2,Query String,我使用Apache2和mod_rewrite来隐藏我的查询字符串。这些是有问题的规则 RewriteCond %{QUERY_STRING} ^query=(.*)$ RewriteRule (.*) /search/%1 [R=301,L] RewriteRule ^search\/?$ /search/?query=test [R=30
RewriteCond %{QUERY_STRING} ^query=(.*)$
RewriteRule (.*) /search/%1 [R=301,L]
RewriteRule ^search\/?$ /search/?query=test [R=301,L]
当我访问/search
(或/search/
)时,我被正确地重定向到/search/?query=test
(根据上一条规则)
从这里开始,RewriteCond
和RewriteRule
应该启动并将我重定向到/search/test
,对吗?据我所知,我的第一个重写规则中的%1
对应于重写条件中的(.*)
,它应该包含测试
但是,实际发生的情况是,我被重定向到/search/test/?query=test
。因此,规则是有效的,但出于某种原因,查询字符串被追加了是否自动添加了QSA选项?
然后我陷入了一个无限循环,重定向到/search/test?query=test
,因为第一个RewriteCond
和RewriteRule
一次又一次地启动
我做错了什么
谢谢 您需要指定,以防止原始请求的查询附加到新URL:
修改查询字符串
默认情况下,查询字符串在传递过程中保持不变。但是,您可以在包含查询字符串部分的替换字符串中创建URL。只需在替换字符串内使用问号,指示应将以下文本重新注入查询字符串。如果要删除现有查询字符串,请仅以问号结束替换字符串。要组合新查询字符串和旧查询字符串,请使用[QSA]标志
因此:
RewriteCond %{QUERY_STRING} ^query=(.*)$
RewriteRule (.*) /search/%1? [R=301,L]