我有一些我需要重定向的旧网址,不幸的是其中一些包含空格。我将它们重定向到我的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符号。
答案 0 :(得分:0)
所以最后我设法通过重新排序.htaccess规则解决了这个问题。所以我做了所有重定向从HTTP到我的重定向脚本,它也在HTTP上。然后,此脚本解析正确的新URL,该URL已在SSL上没有空格,然后脚本重定向到那里。幸运的是,所有旧的URL都在HTTP上,所以它就足够了,我不需要在SSL上重定向这个参数重定向。
使用[NE]
重定向网址时,%20
标记也很有用,因为它可以防止百分号在新网址中进一步编码。