我的.htaccess
文件有问题。我想将no-www重定向到www并将HTTP重定向到HTTPS。
我已经尝试过这些文件,但是它们不起作用...
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.example.com$
RewriteRule ^(.*) http://www.example.com/$1 [QSA,L,R=301]
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [QSA,R=301,L]
还有
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]
你能帮我吗?
答案 0 :(得分:1)
最初的问题是服务器配置中未启用.htaccess
文件。在服务器配置中设置AllowOverride All
以启用.htaccess
文件后,这导致了重定向循环...
您正在获得重定向循环,因为在请求HTTPS时HTTPS
服务器变量正在报告“关闭”。这意味着您有一个正在处理SSL连接的前端代理,并且可以通过将X-Forwarded-Proto
HTTP请求标头(您的应用程序服务器正在查看)设置为“ https”来确认。 (X-Forwarded-Proto
标头是在请求通过时由代理服务器设置的。)
这意味着此代理与应用程序服务器之间的“专用”连接是通过纯HTTP进行的。但是代理和客户端之间的连接由HTTPS保护。但这不一定是问题,但是,这意味着您需要调整指令以检查X-Forwarded-Proto
HTTP请求标头,而不是HTTPS
服务器变量。
例如:
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
确保在测试之前清除浏览器缓存。通常最好使用302(临时)重定向进行测试,并且仅在确定其工作正常时才更改为301(永久),以避免缓存问题。