避免多个Apache重定向用于多个规则

时间:2015-09-08 17:13:45

标签: apache .htaccess redirect http-status-code-301

我需要放置一些重定向来强制执行某些规则并处理一些URL更改。

具体如下:

  1. 如果协议为http,请强制执行https
  2. 如果没有子域名或子域名不是www,请强制执行www
  3. 如果域名为www.domainA.com且路径不是开始,则为/en//fr//de//es/,强制执行/en/
  4. 如果域名为www.domainB.com且路径不是开始,则为/b_en//b_fr//b_de//b_es/,强制执行/b_en/
  5. 我一直试图让这个工作,所以任何时候只有一个301发生,我们最终没有301链。例如,对http://domainA.com的请求可能会被重定向3次:

    1. http://domainA.com 301 to ...
    2. https://domainA.com 301 to ...
    3. https://www.domainA.com 301 to ...
    4. https://www.domainA.com/en/
    5. 然而,我无法提供解决方案。

      这将存在于.htaccess文件中。

1 个答案:

答案 0 :(得分:1)

您可以在.htaccess

中使用
# domainA
RewriteCond %{HTTP_HOST} domainA\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/(?:en|fr|de|es) [NC]
RewriteRule ^ https://www.domainA.com/en%{REQUEST_URI} [NE,L,R=301]

# domainB
RewriteCond %{HTTP_HOST} domainB\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/b_(?:en|fr|de|es) [NC]
RewriteRule ^ https://www.domainB.com/b_en%{REQUEST_URI} [NE,L,R=301]

# https & www
RewriteCond %{HTTP_HOST} (?:^|\.)(domainA\.com|domainB\.com)$ [NC]
RewriteCond %{HTTP_HOST} !^www\. [NC,OR]
RewriteCond %{HTTPS} off
RewriteRule ^ https://www.%1%{REQUEST_URI} [NE,L,R=301]

永远不会超过一次重定向。