添加SSL后,Cakephp 3前缀路由在Linux服务器中不起作用

问题描述

CakePHP版本:3.6

我创建了一个具有3个路由前缀的项目:adminvendorcustomer

在我的本地计算机上,它工作正常,所有前缀均正常工作。我将项目移至远程Linux服务器,起初运行良好。添加SSL证书后,我将像这样访问我的网站:

https://subdomain.myproject.com/vendor

它不起作用。浏览器一直处于加载状态,一段时间后,它显示无法访问该网站需要很长时间才能响应。

如果我添加斜杠,则可以正常工作:

https://subdomain.myproject.com/vendor/

除供应商前缀外,其他前缀都可以正常工作。是因为CakePHP拥有供应商文件夹,还是由于服务器重定向

请指导我,如何将http重定向到https?我在.htaccess中添加了一些内容,但同时也显示了“重定向过多”问题。

解决方法

如果您在Apache中启用了mod_dir,则默认情况下,它应该自动将您的请求重定向到带斜杠的相同URL。来自Apache documentation

当服务器收到一个“ trailing slash”重定向消息时 请求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>

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...