Apache2:.htaccess重定向过多

时间:2019-01-30 16:02:19

标签: apache .htaccess redirect

注意我已经看到有关该问题的几个问题,但没有一个帮助到我。

我使用以下.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]

1 个答案:

答案 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,因为您除外。

注意:请确保在测试之前清空浏览器缓存。