После установки скрипта все поддомены переходят в основной домен

У меня есть основной домен www.example.com.

и следующие поддомены под основным доменом

support.example.com
test.example.com

Ранее оба поддомена работали нормально.

Но после установки PHP-скрипта на основной домен работает только основной домен и все поддомены переходят в основной домен.

После проверки файла .htaccess я нашел этот код:

RewriteEngine  on  
RewriteBase /  
RewriteCond %{THE_REQUEST} /(.+?)\.php[\s?] [NC]  
RewriteRule ^ %1 [R=301,L,NE]  
RewriteCond %{REQUEST_FILENAME} !-d  
RewriteCond %{DOCUMENT_ROOT}/$1.php -f  
RewriteRule ^(.+?)/?$ $1.php [L]  
RewriteCond %{HTTPS} off [OR]  
RewriteCond %{HTTP_HOST} !^www\. [NC]  
RewriteRule (.*) https://www.example.com%{REQUEST_URI} [R=301,L]  

IndexIgnore *   

Связано ли это с неработающие поддомены?

1
задан 25 June 2021 в 14:01
1 ответ
RewriteCond %{HTTPS} off [OR] 
RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteRule (.*) https://www.example.com%{REQUEST_URI} [R=301,L]

Вы не указали, что именно происходит и на что указывают поддомены, поэтому здесь могут быть и другие проблемы.

Однако, если ваши поддомены указывают на ту же область файловой системы (или, возможно, подкаталог), что и основной домен, то вышеуказанное правило перенаправит все поддомены на www.example.com - таким образом, поддомен будет "потерян".

В зависимости от ваших требований, вы можете решить эту проблему, проверяя только example.com вместо !^www\. и разделить перенаправление HTTP на HTTPS на отдельное правило. Например:

# HTTP to HTTPS (including subdomains)
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# Canonical non-www to www redirect for main domain only
RewriteCond %{HTTP_HOST} ^(example\.com)\.?$ [NC]  
RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L]

Перед тестированием вам необходимо очистить кэш браузера. (Предпочтительно тестировать с 302 - временными - перенаправлениями, чтобы избежать потенциальных проблем с кэшированием)

Однако директивы также расположены в неправильном порядке (это не связано с проблемой поддомена). Канонические перенаправления (выше) должны идти перед внутренними переписываниями. Итак, ваш файл .htaccess должен быть упорядочен следующим образом:

IndexIgnore *

RewriteEngine On  
RewriteBase /

# HTTP to HTTPS (including subdomains)
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# Canonical non-www to www redirect for main domain only
RewriteCond %{HTTP_HOST} ^(example\.com)\.?$ [NC]  
RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L]

# Remove ".php" extension on requested URL
RewriteCond %{THE_REQUEST} \s/(.+)\.php[\s?] [NC]  
RewriteRule ^ /%1 [R=301,L,NE]  

# Internally rewrite request to append ".php" extension
RewriteCond %{REQUEST_FILENAME} !-d  
RewriteCond %{DOCUMENT_ROOT}/$1.php -f  
RewriteRule ^(.+?)/?$ $1.php [L]
0
ответ дан 28 July 2021 в 13:22

Теги

Похожие вопросы