Mod rewrite 如何关闭QSA?(查询字符串追加)

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

我使用Apache2和mod_rewrite来隐藏我的查询字符串。这些是有问题的规则

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]