首页 > 解决方案 > 添加 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.htaccesscakephphttpscakephp3

解决方案


如果您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>

推荐阅读