为什么我的No-www和https的htaccess无法正常工作?

时间:2019-01-24 01:52:45

标签: .htaccess https no-www

我的.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]

你能帮我吗?

1 个答案:

答案 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(永久),以避免缓存问题。