当URL在HTTPS上包含空格时,.htaccess重定向显示多个%20

时间:2016-07-22 03:25:53

标签: .htaccess loops redirect https spaces

我有一些我需要重定向的旧网址,不幸的是其中一些包含空格。我将它们重定向到我的redirect.php脚本,但出于某种原因,当URL包含空格或%20时,在重定向后的URL中,%20重复无限次。这似乎只发生在我们将服务器切换到HTTPS时,在http子域上运行或在我的本地运行时它正常工作。

我的规则是:

RewriteRule ^/?(gallery\.php)(.*) /redirect.php$2 [R,L]

这是正常的:

gallery.php?place=name - > redirect.php?place=name

但是当url包含空格时会发生这种情况:

gallery.php?place=long%20name - >

redirect.php?place=long%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20name

我尝试添加[B][NE]标记,但没有成功。有什么我想念的吗?

更新1: 为了排除htaccess中的其他规则,我创建了一个新示例。我有空目录/test/,里面是空文件/test/index.php/test/.htaccess文件,其中包含:

RewriteEngine On
RewriteRule ^/?(index\.php)(.*) /$2 [NE,R,L]

就是这样。行为仍然很奇怪,例如: /test/index.php?a=xy按预期工作,但/test/index.php?a=x%20y重复%20符号。

1 个答案:

答案 0 :(得分:0)

所以最后我设法通过重新排序.htaccess规则解决了这个问题。所以我做了所有重定向从HTTP到我的重定向脚本,它也在HTTP上。然后,此脚本解析正确的新URL,该URL已在SSL上没有空格,然后脚本重定向到那里。幸运的是,所有旧的URL都在HTTP上,所以它就足够了,我不需要在SSL上重定向这个参数重定向。

使用[NE]重定向网址时,%20标记也很有用,因为它可以防止百分号在新网址中进一步编码。