apache - 添加 SSL 后,Cakephp 3 前缀路由在 Linux 服务器中不起作用
问题描述
CakePHP 版本:3.6
我创建了一个具有 3 个路由前缀的项目admin
:vendor
和customer
.
在我的本地机器上它工作正常,所有前缀都工作正常。我将我的项目移到了远程 Linux 服务器上,起初它运行良好。一旦我添加了 SSL 证书并像这样访问我的网站:
https://subdomain.myproject.com/vendor
这没用。浏览器不断加载,一段时间后显示无法访问此站点,响应时间过长。
如果我添加一个斜杠它工作正常:
https://subdomain.myproject.com/vendor/
除了供应商前缀之外,其他前缀都按预期工作。是因为 CakePHP 有一个供应商文件夹还是因为服务器重定向?
请指导我,如何将http重定向到https?我在 .htaccess 中添加了一些内容,但它也显示了“重定向过多”的问题。
解决方案
如果您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>
推荐阅读
- python - 使用字典替换数据框中的互联网首字母缩略词
- c++ - 如何找到修改后的字符串等于原始字符串的时间
- python - 使用 beautifulsoup 和正则表达式从字符串中获取日期,目前没有
- c++ - 'ClassName' 和 'ClassInstance' 未在此范围内声明
- ios - 我可以将我的 iOS 应用程序本地化为西班牙语或德语,同时将手机的其余部分保持为英语吗?
- java - Spring数据JPA JPQL选择子属性的位置
- c# - 如何在 ASP.NET Core 中缓存请求?
- amazon-web-services - Lambda 代理集成是反向代理吗?
- node.js - 无法使用 npm 安装引导程序
- javascript - TypeScript 再次结合 *.js + *.d.ts?