我的.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]
你能帮帮我吗?
发布于 2019-01-25 23:47:55
最初的问题是服务器配置中没有启用.htaccess
文件。在服务器配置中设置AllowOverride All
以启用.htaccess
文件后,这将导致重定向循环...
您将得到一个重定向循环,因为当请求HTTPS
时,HTTPS服务器变量报告为"off“。这意味着您有一个处理X-Forwarded-Proto
连接的前端代理,这可以通过以下事实得到确认:https 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 (永久)-以避免缓存问题。
https://stackoverflow.com/questions/54338311
复制相似问题