RewriteCond %{HTTPS} выключен [ИЛИ]
RewriteCond %{HTTP_HOST} !^www\. [НЗ]
RewriteRule (.*) https://www.example.com%{REQUEST_URI} [R=301,L]
Вы не указали точно, что происходит или куда указывают поддомены, поэтому здесь могут быть другие проблемы.
Однако, если ваши поддомены указывают на ту же область файловой системы (или, возможно, подкаталог), что и основной домен, то приведенное выше правило перенаправит все поддомены на www.example.com
- значит субдомен "потерян".
В зависимости от ваших требований, вы можете решить эту проблему, только проверив пример.com
вместо !^www\.
и разделение перенаправления с HTTP на HTTPS на отдельное правило. Например:
# HTTP на HTTPS (включая поддомены)
RewriteCond %{HTTPS} выкл.
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# Канонический редирект без www на www только для основного домена
RewriteCond %{HTTP_HOST} ^(пример\.com)\.?$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L]
Перед тестированием вам необходимо очистить кеш браузера. (Предпочтительно протестировать с 302 — временной — переадресацией, чтобы избежать потенциальных проблем с кэшированием.)
Однако директивы также расположены в неправильном порядке (это не имеет отношения к проблеме с поддоменом). Канонические перенаправления (выше) должны быть удалены перед внутренняя перезапись. Так что ваши .htaccess
вместо этого файл должен быть упорядочен следующим образом:
Индексигнорировать *
RewriteEngine включен
Переписать Базу /
# HTTP на HTTPS (включая поддомены)
RewriteCond %{HTTPS} выкл.
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# Канонический редирект без www на www только для основного домена
RewriteCond %{HTTP_HOST} ^(пример\.com)\.?$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L]
# Удалить расширение ".php" для запрошенного URL
RewriteCond %{THE_REQUEST} \s/(.+)\.php[\s?] [NC]
RewriteRule ^ /%1 [R=301,L,NE]
# Внутренне переписать запрос, чтобы добавить расширение ".php"
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
Правило перезаписи ^(.+?)/?$ $1.php [L]