首页 > 解决方案 > 将多个 .htaccess 重写规则合并到一行中?

问题描述

我们正在启动一个新站点,我需要重定向几个旧 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 个不同的域上

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

标签: apache.htaccessredirectmod-rewriteurl-rewriting

解决方案


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

请确保在测试您的 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(optional) ,请将您当前的 cond 部分更改为RewriteCond %{HTTP_HOST} ^(?:www\.)?(domain1\.com|domain2\.com)$ [NC].

推荐阅读