Принудительный SSL и www в .htaccess

12

Я ищу способ заставить SSL и www.

Я был в состоянии заставить оба по отдельности, но вместе я продолжаю сталкиваться с проблемами перенаправления. Следующий код работает при обработке URL-адреса в этом формате: http://example.comи правильно перенаправляет на, https://www.example.comно когда входящий URL-адрес https://example.comне будет перенаправлен https://www.example.com- Есть предложения?

EDIT: он должен также отправить http://www.example.comв https://www.example.com.

RewriteCond %{REMOTE_ADDR} !127\.0\.0\.0
RewriteCond %{SERVER_PORT} 80
RewriteCond %{HTTP_HOST} !^www.example\.com$
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]
Стивен
источник

Ответы:

7

Первая строка используется для предотвращения перезаписи внутренних URL. Это может привести к отображению разных страниц, поэтому я удалил их.

Если хост example.comзапрашивается или не запрашивается через HTTPS, он будет перезаписан на https://example.com/. Т.е., он переписывает http://example.com, http://www.example.comи https://example.comк https://www.example.comв одном действии.

RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

Документация по mod_rewrite для Apache 2.2 .

Если вам нравятся субдомены forum.example.com, первое правило должно быть таким, как есть. В противном случае, вы можете сделать отрицательный матч против www.example.com.

Lekensteyn
источник
0

Разве третья строка не должна быть:

RewriteCond %{HTTP_HOST} ^example\.com$
Пирс Карсенбарг
источник
0

Попробуй это:

RewriteCond %{REMOTE_ADDR} !127\.0\.0\.0
RewriteCond %{SERVER_PORT} 80 [OR]
RewriteCond %{HTTP_HOST} !^www.example\.com$
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]
Арвин
источник
0

Вы также можете использовать следующие строки, которые я использую, и работать без нареканий.

(Удалите верхний RewriteCond, если вы не используете CloudFlare)

RewriteCond %{HTTP:CF-Visitor} '"scheme":"http"' [OR]
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=302]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=302]
itteam
источник
0

Только что реализовал это для моего сайта. Работает как шарм! Добавлено в начало моего файла .htaccess. Перенаправляет все случаи, когда люди вводят www или не www, http или https.

# BEGIN HTTPS Redirect
RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]
# END HTTPS Redirect
user67283
источник
0

Я проверил все предложения, приведенные выше, но ни один из них не охватил весь сценарий.

Я хотел, чтобы все посетители пошли в https://www.example1.com/

Некоторые из кодов, предоставленных другими пользователями, работали для взятия небезопасных и / или не-www-URL https://www.example1.com/, однако ни один из них не https://example1.comбыл преобразован в «www».

Мой сайт размещен на GoDaddy, на случай, если это что-то изменит.

Это код, который работал для меня:

RewriteEngine On 
RewriteCond %{HTTP_HOST} !^www.example1\.com$ [OR]
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example1.com/$1 [L,R=301]

Последняя строка может быть также:

RewriteRule ^(.*)$ https://www.example1.com/$1 [R,L]

Но я использовал код «301», чтобы отправить сообщение « переехал навсегда » в надежде, что Google и, возможно, другие поисковые системы обновят старые ссылки.

onpre
источник