Принудительное использование HTTPS и Non-WWW для всех папок с исключениями на месте - PullRequest
0 голосов
/ 18 января 2019

Я сталкиваюсь с проблемой, из-за которой мои субдомены неправильно получают www, добавленное к ним через правило перезаписи htaccess ...

Моя структура папок выглядит следующим образом:

  • /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 голосов
/ 18 января 2019

Удалить:

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]
...