问题描述
CakePHP版本:3.6
我创建了一个具有3个路由前缀的项目:admin
,vendor
和customer
。
在我的本地计算机上,它工作正常,所有前缀均正常工作。我将项目移至远程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>