Как настроить автоматический переход на защищенное соединение с использованием HTTPS?

Как исправить проблему, чтобы редирект работал также и для файлов, находящихся на сервере, при использовании правил в файле .htaccess?

Есть проект на PHP (yii2) с задачей добавить редирект с http на https для всех страниц. Для этого были добавлены следующие строки в файл .htaccess в корне проекта:

# redirect to https
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# redirect the main page to https
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Теперь редирект работает для всех страниц, кроме файлов, доступ к которым можно получить по следующим ссылкам:

mysite.ru/files/file.pdf
mysite.ru/files/pdf/file1.pdf
mysite.ru/files/pdf/file2.pdf
...

Попробовал добавить следующее правило на основе подсказки ChatGPT, но оно не сработало:

RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^files/ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Вопрос: Как можно решить эту проблему и реализовать редирект для всех файлов при использовании https?
  • 16 ноября 2023 г. 8:09
Ответы на вопрос 5
Чтобы исправить проблему с редиректом для файлов при использовании HTTPS, вам нужно добавить модификатор RewriteBase в ваш файл .htaccess. 

Попробуйте обновить ваш файл .htaccess следующим образом:

RewriteEngine on
RewriteBase /

# redirect to https
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# redirect the main page to https
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# redirect files to https
RewriteCond %{HTTPS} off
RewriteRule ^files/ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

После внесения этих изменений, редирект должен работать и для файлов, находящихся на сервере, по указанным ссылкам.
 Включите модуль перезаписи веб-сервера с помощью команды "RewriteEngine On". 
 Проверьте, если хост вашего сайта соответствует "yourdomain1.com" и регистр символов не имеет значения с помощью команды "RewriteCond %{HTTP_HOST} ^yourdomain1.com [NC]". 
 Проверьте, если HTTPS отключен с помощью команды "RewriteCond %{HTTPS} off". 
 Перенаправьте все запросы на ваш сайт с протоколом HTTPS, используя команду "RewriteRule ^(.*)$https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]".
Похожие вопросы