2017-10-08 73 views
1

我使用类似于我.htaccess文件下面的东西重定向所有http请求https的.htaccess重写规则,以HTTP重定向到https弄乱%转义参数,URL

RewriteEngine on 
RewriteCond %{HTTPS} !=on 
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

这样的作品,除了因为当一个URL传递与逃脱的参数,这样的情况:

http://www.example.com/download.php?go=app%20name 

重定向时,它被误再次逃进:

https://www.example.com/download.php?go=app%2520name 

我该如何解决这个问题?

回答

1

使用NE or noescape flag在您的规则:

RewriteEngine on 

RewriteCond %{HTTPS} !=on 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE] 

确保测试更改之前,清除浏览器缓存。

+0

哦,老兄,我忘了网页浏览器缓存。我只花了10分钟看到为什么'NE'条件不起作用。然后在底部看到你的编辑。只是好奇,浏览器缓存如何影响它?在服务器上解释'.htaccess',并且客户端浏览器没有它的概念。 – c00000fd

+0

如果客户端浏览器从Web服务器获取“301”状态,则会在本地缓存原始URL和重定向URL。下次您在浏览器中访问或输入原始网址时,它会提供重定向的网址,并跳过**跳至网站服务器。 – anubhava

+0

谢谢。仅仅因为好奇,有没有一种快捷方式可以在Chrome浏览器中清除缓存?类似于Shift + F5清除CSS缓存。 – c00000fd