我尝试使用正则表达式将包含/page/和?lang=xx或&lang=xx的查询重定向到主页。到目前为止,我已经尝试过了,规则的第一部分有效,但第一个问号后面有?lang=和&lang=的部分无效。
/page/
?lang=xx
&lang=xx
?lang=
&lang=
RewriteRule ^page/([0-9]+)/?(\?|&)lang=([a-z]{2})$ https://example.com [R=301,L]
任何帮助都将不胜感激。
a0zr77ik1#
RewriteRule指令仅与URL-path匹配。要与查询字符串匹配,需要与前面的 condition 中的QUERY_STRING服务器变量匹配。例如:
RewriteRule
QUERY_STRING
RewriteCond %{QUERY_STRING} (^|&)lang=[a-z]{2}(&|$) RewriteRule ^page/\d+/?$ https://example.com/ [R=301,L]
您没有指定要匹配的实际URL,因此根据您的规则,将匹配/page/<number>/的URL,其中尾部斜杠是可选的。另外,lang URL参数必须出现在查询字符串中的任何位置,并且其值必须是两个字母。如果存在lang URL参数,但为 * 空 * 或包含两个以上的字母,则不会匹配,也不会发生重定向。\d是与[0-9]相同的速记字符类。不需要原始规则中的捕获子组。首先使用302(临时)重定向进行测试以避免潜在的缓存问题。确保在测试之前清除浏览器缓存。
/page/<number>/
lang
\d
[0-9]
1条答案
按热度按时间a0zr77ik1#
RewriteRule
指令仅与URL-path匹配。要与查询字符串匹配,需要与前面的 condition 中的QUERY_STRING
服务器变量匹配。例如:您没有指定要匹配的实际URL,因此根据您的规则,将匹配
/page/<number>/
的URL,其中尾部斜杠是可选的。另外,lang
URL参数必须出现在查询字符串中的任何位置,并且其值必须是两个字母。如果存在lang
URL参数,但为 * 空 * 或包含两个以上的字母,则不会匹配,也不会发生重定向。\d
是与[0-9]
相同的速记字符类。不需要原始规则中的捕获子组。首先使用302(临时)重定向进行测试以避免潜在的缓存问题。确保在测试之前清除浏览器缓存。