Подтвердить что ты не робот

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 знает, что это невозможно.

4b9b3361

Ответ 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]

Надеюсь, это поможет кому-то!

Ответ 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/