注意我已经看到有关该问题的几个问题,但没有一个帮助到我。
我使用以下.htaccess
文件重定向过多。我不是使用.htaccess的专家,但我认为它也可以处理https
,因此在此程序中我真的不必担心。
RewriteCond %{HTTP} off
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} !^\. [NC]
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
### Remove trailing slash from all URLs
RewriteRule ^(.*)/$ $1 [R=301,L]
答案 0 :(得分:2)
首先这些规则是错误的:
RewriteCond %{HTTP} off
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
您检查请求是否随htpps
一起发送,否则,除了循环之外,您什么也不做,因为在此行RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
中,您不会将http
更改为https
让我们在此处复制所有规则,并在第一个条件规则中将http
更改为https
:
RewriteCond %{HTTP} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} !^\. [NC]
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
上面的规则之所以循环,是因为只要发生第二个条件RewriteCond %{HTTP} off
,第一个条件RewriteCond %{HTTP_HOST} !^\. [NC]
就会一次又一次地完成。
举个例子:
http://www.yourwebsite.com
此请求将由第一个条件处理,并将被重定向到:
https://www.yourwebsite.com
然后,它将由第二个条件处理,因为它可以通过它,并将被重定向到:
http://www.yourwebsite.com
再次,第一个条件,然后第二个,依此类推。这样会使循环更多。
像这样更改第一个规则:
RewriteCond %{HTTP} off
RewriteCond %{HTTP_HOST} ^\. [NC]
RewriteRule ^(.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
据我了解,您只希望在这种情况下RewriteCond %{HTTP_HOST} ^\.
强制请求进入https
,因为您除外。
注意:请确保在测试之前清空浏览器缓存。