У меня есть основной домен 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 *
Связано ли это с неработающие поддомены?
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]