Htaccess заставляет https и перенаправлять www на не-www, но никаких других поддоменов
Я знаю, что существует много похожих потоков, но ни одна из них не соответствует моей точной проблеме. Вот что я пытаюсь сделать:
(1) http://www.mydomain.com/ -> https://mydomain.com/
(2) http://mydomain.com/ -> https://mydomain.com/
(3) https://www.mydomain.com -> https://mydomain.com/
В идеале я также хотел бы осветить ситуацию, если я когда-нибудь добавлю дополнительные поддомены, чтобы автоматически вести себя следующим образом (желательно в общем виде, который будет работать для любого добавляемого субдомена).
(4) http://sub.mydomain.com/ -> https://sub.mydomain.com/
В этот момент мне интересно, возможно ли даже создать один файл .htaccess, который будет делать все, что мне нужно, хотя я должен признать, что я понимаю регулярные выражения, но Im не точно mod_rewrite uberpro.
Вот те решения, которые я уже пробовал:
Мой SSL-сертификат охватывает www-субдомен, поэтому я не ищу решение об ошибке "ненадежного соединения", Im знает, что это невозможно.
Ответы
Ответ 1
Поместите этот код в ваш файл DOCUMENT_ROOT/.htaccess
:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{ENV:HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,R=301,NE]
Ответ 2
Я нашел, что большинство предложений не ловятся, когда у вас есть что-то, что было https://www.example.com и перенаправлено на https://example.com.
Следующие действия выполнялись для всех перестановок:
RewriteEngine On
# match any URL with www and rewrite it to https without the www
RewriteCond %{HTTP_HOST} ^(www\.)(.*) [NC]
RewriteRule (.*) https://%2%{REQUEST_URI} [L,R=301]
# match urls that are non https (without the www)
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} !^(www\.)(.*) [NC]
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Надеюсь, это поможет кому-то!
Ответ 3
RewriteEngine on
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\.([^.]+\.[^.]+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,R=301,NE]
Этот script будет перенаправлять
to
сохраняя поддомен.
Ответ 4
Для принудительного использования HTTPS
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Чтобы заставить WWW не www
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.bewebdeveloper.com$
RewriteRule ^(.*) http://bewebdeveloper.com/$1 [QSA,L,R=301]
Ответ 5
Без примеров, сработавших для меня, они просто застряли в цикле, но все же работает.
# match any URL with www and rewrite it to https without the www
RewriteCond %{HTTP_HOST} ^(www\.)(.*) [NC]
RewriteRule (.*) https://%2%{REQUEST_URI} [R=301,L]
# match non https and redirect to https
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
Приказ имеет значение, он предотвратит 3-ю переадресацию в некоторых случаях.
Если вы хотите использовать поддомен (ничего, кроме www.), просто удалите первый набор правил.
Итак, для поддоменов все, что вам нужно, это
# match non https and redirect to https
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
Я использую службы Cloudway, и я обнаружил, что это единственное, что работает
Ответ 6
Я нашел, что следующий ответ будет соответствовать вашему требованию:
www для не-www с https, но никаких других поддоменов
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Выполняйте все три (3) условия:
(1) http://www.example.com/ -> https://example.com/
(2) http://example.com/ -> https://example.com/
(3) https://www.example.com -> https://example.com/
но нет других субдоменов, кроме www
:
(4) http://others.example.com -> https://others.example.com/
(5) https://others.example.com -> https://others.example.com/