Php 重写COND查询\u字符串返回引用

Php 重写COND查询\u字符串返回引用,php,.htaccess,mod-rewrite,Php,.htaccess,Mod Rewrite,我正在尝试从此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始终为空。我似乎只能引用一个变量。好吧,这不可能像你尝试的那样。在反向引用中(%N

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

好吧,这不可能像你尝试的那样。在反向引用中(
%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中的预期一致,这是不可能的。在反向引用中(
%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中的预期相同