.htaccess以任何顺序捕获GET参数

时间:2017-05-26 09:36:53

标签: apache .htaccess redirect url-rewriting

我试图编写一个重写规则来检查是否以任何顺序设置了多个获取参数,然后使用这些获取参数中的参数重定向到网址,这就是我尝试过的方法

RewriteCond %{QUERY_STRING} (?:^|&)retailer_filter=([^&]+)
RewriteCond %{QUERY_STRING} (?:^|&)product=([^&]+)
RewriteCond %{QUERY_STRING} (?:^|&)sitechange=([^&]+)
RewriteRule ^$ /?product=%1&retailer_filter=%2 [R=301,L]

这重定向但只有sitechange参数,所以

/?product=test&retailer_filter=test&sitechange=1重定向到?/product=1&retailer_filter=

我希望它重定向?/product=test&retailer_filter=test

但它需要能够以不同的顺序接受get参数,所以

/?sitechange=1t&retailer_filter=test&product=test还需要重定向到?/product=test&retailer_filter=test

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:1)

您实际上是在尝试删除sitechange查询参数。您可以使用此规则:

RewriteEngine On

RewriteCond %{THE_REQUEST} \?(.*&)?sitechange=[^&]*&?(\S*)\sHTTP [NC]
RewriteRule ^/?$ %{REQUEST_URI}?%1%2 [R=301,NE,L]

此规则将以任何顺序接受GET参数。 sitechange=可以是第一个或最后一个或中间位置。