1

我正在尝试从此 URL 恢复 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 始终为空。我似乎只能反向引用一个变量。

4

1 回答 1

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......它确保查询字符串参数的顺序将与正则表达式中的预期一致

于 2012-12-07T15:40:46.623 回答