RewriteRule中的条件“OR”操作

时间:2018-01-29 07:17:20

标签: apache .htaccess mod-rewrite httpd.conf

我想将旧网站的某些网址重定向到新网站。这种重定向到新网站是有条件的,即如果查询参数包含值为“eu”,“jp”或“in”的关键“站点”,则只有重定向否则不会。

 RewriteCond %{QUERY_STRING} (?:^|&)site=(eu) [NC,OR]
 RewriteCond %{QUERY_STRING} (?:^|&)site=(in) [NC,OR]
 RewriteCond %{QUERY_STRING} (?:^|&)site=(jp) [NC]
 RewriteRule ^/?fetchHomePage.action$ https://example.com/%1? [R=301,L,NC]
 RewriteRule ^/?fetchFirstPage.action$ https://example.com/firstpage/%1? [R=301,L,NC]
 RewriteRule ^/?fetchSecondPage.action$ https://example.com/fetchsecondpage/%1? [R=301,L,NC]
 RewriteRule ^/?fetchThirdPage.action$ https://example.com/fetchThirdPage/%1? [R=301,L,NC]

使用上述配置,它适用于路径“/ fetchHomePage”,但对于URL中的其他路径(“/ fetchFirstPage”,“/ fetchSecondPage”和“/ fetchThirdPage”),浏览器始终重定向到新网站,而不管是什么site参数中有site param。

1 个答案:

答案 0 :(得分:2)

您可以遵循以下方法之一:

在这里,您需要为所有规则添加条件。

RewriteCond %{QUERY_STRING} (?:^|&)site=(eu|in|jp)(?:&|$) [NC]
RewriteRule ^/?fetchHomePage.action$ https://example.com/%1? [R=301,L,NC]

RewriteCond %{QUERY_STRING} (?:^|&)site=(eu|in|jp)(?:&|$) [NC]
RewriteRule ^/?fetchFirstPage.action$ https://example.com/firstpage/%1? [R=301,L,NC]

RewriteCond %{QUERY_STRING} (?:^|&)site=(eu|in|jp)(?:&|$) [NC]
RewriteRule ^/?fetchSecondPage.action$ https://example.com/fetchsecondpage/%1? [R=301,L,NC]

RewriteCond %{QUERY_STRING} (?:^|&)site=(eu|in|jp)(?:&|$) [NC]
RewriteRule ^/?fetchThirdPage.action$ https://example.com/fetchThirdPage/%1? [R=301,L,NC]

您也可以编写多个规则,但为此需要从除最后规则之外的所有规则中删除L标志。

RewriteCond %{QUERY_STRING} (?:^|&)site=(eu|in|jp)(?:&|$) [NC]
RewriteRule ^/?fetchHomePage.action$ https://example.com/%1? [R=301,NC]
RewriteRule ^/?fetchFirstPage.action$ https://example.com/firstpage/%1? [R=301,NC]
RewriteRule ^/?fetchSecondPage.action$ https://example.com/fetchsecondpage/%1? [R=301,NC]
RewriteRule ^/?fetchThirdPage.action$ https://example.com/fetchThirdPage/%1? [R=301,L,NC]

L =最后

  

[L]标志导致mod_rewrite停止处理规则集。在大多数情况下,这意味着如果规则匹配,则不会处理其他规则。这对应于Perl中的最后一个命令,或C中的break命令。使用此标志指示应立即应用当前规则而不考虑进一步的规则。

参考:https://httpd.apache.org/docs/2.4/rewrite/flags.html