Вимушення SSL та www у .htaccess


13

Я шукаю спосіб змусити 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.



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]

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

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 та, можливо, інші пошукові системи оновлять старі посилання.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.