volego
@volego
Fullstack web-разработчик

Как сделать редирект с http на https для сайта на YII2 (basic) через .htaccess?

Добрый день, уважаемые знатоки!
Есть сайт на YII2 basic
htaccess в корне сайта:
Options +FollowSymLinks
IndexIgnore */*
RewriteEngine on

RewriteCond %{REQUEST_URI} !^/(web)
RewriteRule ^assets/(.*) /web/assets/$1 [L]
RewriteRule ^css/(.*) /web/css/$1 [L]
RewriteRule ^scss/(.*) /web/scss/$1 [L]
RewriteRule ^js/(.*) /web/js/$1 [L]
RewriteRule ^img/(.*) /web/img/$1 [L]
RewriteRule ^fonts/(.*) /web/fonts/$1 [L]
RewriteRule (.*) /web/$1

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /web/index.php

htaccess в папке web:
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php

Вопросы:
1) как корректно сделать редирект с http на https для всех страниц
2) как корректно убрать www из адресной строки - сейчас адрес с www редиректится на {sitename.ru}//web/index.php и ведет на 404 ошибку.
Заранее спасибо за ответы!
  • Вопрос задан
  • 2744 просмотра
Решения вопроса 1
volego
@volego Автор вопроса
Fullstack web-разработчик
Спасибо за внимание!
Проблема решилась следующим образом: .htaccess, который в корне публичной папки, отредактировал:
Options +FollowSymLinks
IndexIgnore */*
RewriteEngine on

#enable HTTPS only
#RewriteCond %{HTTPS} !=on
#RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]

#remove WWW
#RewriteCond %{HTTP_HOST} ^www\.site\.ru$ [NC]
#RewriteRule ^(.*)$ https://site.ru/$1 [R=301,L]

RewriteCond %{REQUEST_URI} !^/(web)
RewriteRule ^assets/(.*) /web/assets/$1 [L]
RewriteRule ^css/(.*) /web/css/$1 [L]
RewriteRule ^scss/(.*) /web/scss/$1 [L]
RewriteRule ^js/(.*) /web/js/$1 [L]
RewriteRule ^img/(.*) /web/img/$1 [L]
RewriteRule ^fonts/(.*) /web/fonts/$1 [L]
RewriteRule (.*) /web/$1

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /web/index.php

.htaccess, который в папке web оставил без изменений:
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php

И все отлично стало работать:
1) для всех URL где нет https - редиректит на https
2) для всех URL где есть WWW - убирает его
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
slo_nik
@slo_nik Куратор тега Yii
Добрый вечер.
Попробуйте добавить в web/.htaccess
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]

Если Ваш проект лежит в поддиректории, то в https://%{SERVER_NAME}/$1 [R,L] нужно добавить название поддиректории.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы