Маршрутизация с префиксом Cakephp 3 не работает на сервере Linux после добавления SSL

#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>