之前在别的服务器上做过一个测试网站,为了全部使用https就写了这么一个重定向规则在.htaccess中:
RewriteEngine On
RewriteCond %{HTTPS} off$ [NC]
RewriteRule (.*) https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]
之前工作的一直很好,直到我将apache的mod_spdy模块装上,准备给服务器部署上spdy支持。部署完spdy之后,该站的任何网页都打不开了,一直显示
This webpage has a redirect loop
但是使用IE浏览器的话还是正常的,可以正常的打开网页。于是查找资料,发现在启用了spdy协议之后,mod_rewrite就会获取不到正常的%{HTTPS}状态,从而导致无限的重定向,想让客户端使用https协议访问网站。在mod_spdy没有修复之前,有一个临时的解决办法,就是将重定向规则修改为如下这个样子:
RewriteEngine On
RewriteCond %{SERVER_PORT} ^80$ [NC]
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
其实这只是将判断是否是https访问的方法由判断协议变成了判断端口,如果检查到用户是用80端口访问的就进行重定向,否则就不管了。虽然这么写是可以的,但是因为端口写死了,如果有修改服务端口的需要的话,就需要单独再来调整这个规则,比较麻烦。所以还是看看官方能否找到支持mod_rewrite的办法吧~