#apache #.htaccess #cakephp #https #cakephp3
#apache #.htaccess #cakephp #https #cakephp3
Вопрос:
Версия CakePHP: 3.6
Я создал проект с 3 префиксами маршрута: admin
, vendor
и customer
.
На моем локальном компьютере все работает нормально, все префиксы работают нормально. Я перенес свой проект на удаленный сервер Linux, и сначала он работал нормально. Как только я добавил SSL-сертификат, и я получаю доступ к своему веб-сайту следующим образом:
https://subdomain.myproject.com/vendor
Это не работает. Браузер продолжает загружаться, и через некоторое время он показывает, что этот сайт недоступен, слишком долго отвечал.
Если я добавлю завершающую косую черту, она будет работать нормально:
https://subdomain.myproject.com/vendor/
Кроме префикса поставщика, другие префиксы работают нормально, как и ожидалось. Это потому, что у CakePHP есть папка поставщика или это из-за перенаправления сервера?
Пожалуйста, подскажите мне, как мне перенаправить http на https? Я кое-что добавил в .htaccess, но он также показывает проблему «слишком много перенаправлений».
Ответ №1:
Если вы mod_dir
включили в Apache, он должен по умолчанию автоматически перенаправлять ваши запросы на тот же URL-адрес с завершающей косой чертой. Из документации Apache:
Перенаправление с косой чертой выдается, когда сервер получает запрос на URL http://servername/foo/dirname где dirname — это каталог. Для каталогов требуется косая черта в конце, поэтому mod_dir перенаправляет на http://servername/foo/dirname/
Вероятно, у вас это включено, но проверьте.
это потому, что у cakephp есть папка поставщика
Каталог поставщика не должен быть общедоступным в CakePHP, и я бы не ожидал, что возникнет какая-либо проблема с vendor
префиксом маршрутизации.
как перенаправить http на https
Ваш .htaccess должен выглядеть примерно так, чтобы принудительно перенаправить HTTPS и обеспечить корректное функционирование CakePHP:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# SSL redirect
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# Required for CakePHP
RewriteRule ^$ webroot/ [L]
RewriteRule (.*) webroot/$1 [L]
</IfModule>