在所有文件夹上强制使用HTTPS和非WWW,但存在例外情况

时间:2019-01-18 06:32:59

标签: .htaccess mod-rewrite

我遇到了一个问题,即我的子域通过htaccess重写规则错误地将www附加到了它们。

我的文件夹结构如下:

  • /public_html/index.html(维护页面,以防万一)
  • /public_html/.htaccess
  • /public_html/websitename
  • /public_html/subdomain
  • /public_html/testsite
  • /public_html/clone

位于我的/public_html/中的我的.htaccess如下所示

# Force HTTPS & WWW
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTPS} off [OR]
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
    RewriteRule ^ https://www.%1%{REQUEST_URI} [L,NE,R=301]
</IfModule>

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTP_HOST} websitename.com$ [NC]
    RewriteRule ^(.*)$ /websitename/$1 [L]

    RewriteEngine On
    RewriteCond %{HTTP_HOST} subdomain.website.com$ [NC]
    RewriteRule ^(.*)$ /subdomain/$1 [L]
</IfModule>

这对于websitename.com来说是完美的,它会强制将URL重写为https://www.websitename.com

但是,它使我的子域在应为https://www.subdomain.websitename.com的情况下被错误地重写为https://subdomain.websitename.com

我不想强制将HTTPS和WWW强制放在各个网站文件夹中……,我正在寻找一种解决方案,以免除subdomain根据重写规则。

我尝试添加以下条件,但没有帮助:

RewriteCond %{HTTP_HOST} subdomain.websitename.com$ [NC]

任何人都知道该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

删除:

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [L,NE,R=301]

并添加:

RewriteCond %{HTTP_HOST} ^domain\.com$ [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

对于多个域,您可以使用:

RewriteCond %{HTTP_HOST} ^([^.]+)\.([a-z]{2,4})$ [NC]
RewriteRule ^ https://www.%1.%2%{REQUEST_URI} [R=301,L]