我有一个旧的 cakephp2 应用程序,我正在将其部署到 AWS ECS。 但是,它需要将所有请求重定向到 https。 我已更新
.htaccess
如下:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} !=/server-status
RewriteBase /
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule !/status https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
RewriteRule ^$ https://%{SERVER_NAME}/users/login [R,L]
RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]
</IfModule>
我希望所有请求都被重定向到 https,但仍有一个请求未正确重定向。在登录页面上,单击登录时,它应该将用户重定向到
https://%{SERVER_NAME}/tests/users
,但是当向该 url https://%{SERVER_NAME}/tests/users
发出请求时,它会不断将请求重定向到 (http) http://%{SERVER_NAME}/users/login
。有什么建议么?谢谢。
您拥有的事实:
RewriteCond %{HTTP:X-Forwarded-Proto} !https
在您的重写条件之一中,表明您可能正在使用 ELB(或类似的)来终止 SSL 并将请求转发到未加密的 Web 服务器。
CakePHP 2 依赖于 Web 服务器设置的
HTTPS
变量来指示请求已加密(检查 lib/Cake/basics.php 中的 env
函数)。您可以使用 SetEnvIf
基于 X-Forwarded-Proto
标头添加变量:
SetEnvIf X-Forwarded-Proto "https" HTTPS=on