Маршрутизация префикса Cakephp 3 не работает на сервере Linux после добавления SSL
Версия 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 есть папка поставщика
Каталог vendor не должен быть общедоступным в 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>