rewritecond query_string反向引用

时间:2012-12-07 15:09:09

标签: php .htaccess mod-rewrite

我尝试从此网址恢复2个变量:

RewriteCond %{QUERY_STRING} id_country=(.*)
RewriteCond %{QUERY_STRING} language=(en|it)
RewriteRule ^page33(.*) https://www.newsite.ch/page.php?language=%2&id_country=$1 [R=301,L]

但是,%2始终为空。我似乎只能反向引用一个变量。

1 个答案:

答案 0 :(得分:1)

AFAIK你不可能尝试它。在反向引用中(%N变量)仅包含上一个正则表达式匹配的数据。

您可以使用环境变量进行解决方法:

RewriteCond %{QUERY_STRING} id_country=(.*)
RewriteRule .* - [E=idcountry:%1]

RewriteCond %{QUERY_STRING} language=(en|it)
RewriteRule ^page33(.*) https://www.newsite.ch/page.php?language=%1&id_country=%{env:idcountry} [R=301,L]

不同的解决方案是在一个正则表达式中匹配您需要的所有变量:

RewriteCond %{QUERY_STRING} id_country=(.*)
RewriteCond %{QUERY_STRING}&id_country=%1 language=(en|it).*&id_country=(.*)
RewriteRule ^page33(.*) https://www.newsite.ch/page.php?language=%1&id_country=%2 [R=301,L]

注意第二个RewriteCond的第一个参数...它确保查询字符串参数的顺序与regexp中的预期一样