apache - 将多个 .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 个不同的域上
我的代码有效,但我想将这一切合并为一个规则,我不太确定这是如何完成的。任何帮助将不胜感激。
解决方案
由于您的条件对于所有域看起来都相同,因此您可以制定如下组合规则。此外,您不需要创建捕获组,因为我们稍后不会在规则中使用它们,所以我在(?:.......)
这里将其更改为非捕获组。
请确保在测试您的 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]
.
推荐阅读
- load-balancing - 数字海洋负载均衡器流量镜像
- c# - 查询字符串活页夹中的 Asp.Net Core 逗号分隔数组
- ruby-on-rails - AWS Elastic Beanstalk Ruby on Rails 6 应用程序部署错误与 nginx
- flutter - Flutter - 您如何检测已经向下的指针何时进入小部件的区域?
- css - 如何更改材质ui组件的道具(MonthView.DayScaleLayoutProps.rowComponent)
- laravel - Laravel:如何对 wherehas 的第一个结果执行 where 子句(order by)
- angular - 将多部分/表单数据从 Angular 前端发送到 .NetCore 后端
- javascript - Vanilla javascript图像轮播在首次加载时未初始化
- android - 如果 BroadcastReceiver 在 AppWidgetProvider 中注册,它会保持活动多长时间?
- reactjs - 如何根据 React 上的输入表单禁用/启用按钮?