这实际上使用单个非常简单RewriteRule
(尽管您也可以通过添加 a 来限制基于域的重定向RewriteCond
)。
RewriteCond %{QUERY_STRING} !^$
RewriteCond %{HTTP_HOST} (www\.)?example\.com
RewriteRule ^$ http://example.com/all/ [QSA,R=301]
这将执行重定向,并应将查询字符串添加到重定向 URL 的末尾:
http://www.example.com/?brand=123&color=red
=> http://example.com/all/?brand=123&color=red
http://example.com/?brand=123&color=red&size=colin
=> http://example.com/all/?brand=123&color=red&size=colin
但是请注意,当我们匹配一个空路径(^$
规则中的 )时,它不会重定向任何已经在/all
... 中的请求或其他任何内容:
http://example.com/all/?brand=123 : not redirected
http://example.com/index.php?brand=123 : not redirected
如果您还想在请求的 URL 指向索引文件时重定向(我将使用 index.php 作为示例),您可以执行以下操作:
RewriteCond %{QUERY_STRING} !^$
RewriteCond %{HTTP_HOST} (www\.)?example\.com
RewriteRule ^(index.php)?$ http://example.com/all/ [QSA,R=301]
当然,您应该将“example.com”替换为您自己的域名,无论您在哪里看到它。
编辑:我添加了一个额外的RewriteCond
,这意味着只有在 URL 上传递查询字符串时才会发生重写。