将多个 .htaccess 重写规则合并为一行?

Merge multiple .htaccess rewrite rules into single line?

我们正在启动一个新站点,我需要重定向几个旧的 URL。在我的 .htaccess 中我有:

RewriteCond %{HTTP_HOST} ^(domain1\.com|domain2\.com)$
RewriteRule ^Countries/(.*) "/local/" [R=301,QSA,L,NC]

RewriteCond %{HTTP_HOST} ^(domain1\.com|domain2\.com)$
RewriteRule ^England/(.*) "/local/" [R=301,QSA,L,NC]

RewriteCond %{HTTP_HOST} ^(domain1\.com|domain2\.com)$
RewriteRule ^Dependent_Areas/(.*) "/local/" [R=301,QSA,L,NC]

RewriteCond %{HTTP_HOST} ^(domain1\.com|domain2\.com)$
RewriteRule ^Ireland/(.*) "/local/" [R=301,QSA,L,NC]

RewriteCond %{HTTP_HOST} ^(domain1\.com|domain2\.com)$
RewriteRule ^Northern_Ireland/(.*) "/local/" [R=301,QSA,L,NC]

RewriteCond %{HTTP_HOST} ^(domain1\.com|domain2\.com)$
RewriteRule ^Scotland/(.*) "/local/" [R=301,QSA,L,NC]

RewriteCond %{HTTP_HOST} ^(domain1\.com|domain2\.com)$
RewriteRule ^Wales/(.*) "/local/" [R=301,QSA,L,NC]

哪个有效,但我很好奇更简洁的方法是什么? Baiscally 我只需要重定向:

^Countries/(.*)
^Dependent_Areas/(.*)
^England/(.*)
^Ireland/(.*)
^Northern_Ireland/(.*)
^Scotland/(.*)
^Wales/(.*)

全部到他们的新位置,即 /local/ - 此重定向发生在 2 个不同的域上

我的代码有效,但我想将所有这些合并到一个规则中,但我不太确定如何完成。任何帮助将不胜感激。

由于所有域的条件看起来都相同,因此您可以制定如下所示的合并规则。此外,您无需创建捕获组,因为我们稍后不会在规则中使用它们,因此我已将其更改为 (?:.......) 非捕获组。

请确保在测试您的 URL 之前清除您的浏览器缓存。

RewriteEngine ON
RewriteCond %{HTTP_HOST} ^(domain1\.com|domain2\.com)$ [NC]
RewriteRule ^(?:Countries|England|Dependent_Areas|Ireland|Northern_Ireland|Scotland|Wakes)/.*$ /local/ [R=301,QSA,L,NC]

几点改进建议:除上述细节外,还可以使用以下内容。

  • 在您的第一个条件中添加 NC 标志,使其不区分大小写匹配。
  • 如果您想在主机名中捕获 www(可选),请将当前的 cond 部分更改为 RewriteCond %{HTTP_HOST} ^(?:www\.)?(domain1\.com|domain2\.com)$ [NC]