将多个 .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]
。
我们正在启动一个新站点,我需要重定向几个旧的 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]
。