【发布时间】:2016-07-22 03:25:52
【问题描述】:
我有一些需要重定向的旧 URL,不幸的是其中一些包含空格。我将它们重定向到我的 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 符号。
【问题讨论】:
-
有趣,它应该可以工作。它适用于我的确切代码,使用 SSL。您的 .htaccess 中是否还有其他重写/重定向?如果是这样,将整个问题发布在您的问题中可能会有所帮助。
-
@Vrac 我已经更新了我的问题并添加了实时示例
-
你控制这台服务器吗?在 httpd.conf 中设置
LogLevel alert rewrite:trace6并跟踪 apache 错误日志。 -
@Vrac ,很抱歉我没有,它是 Media Temple 上的网格服务器。我检查了错误日志,只有可疑行包含以下内容:
[Thu Jul 21 19:16:24 2016] [error] [client 120.22.83.227] ModSecurity: Rule 7fcaac4886c8 [id "-"][file "/etc/apache2/mod_security/custom/jetpack.conf"][line "66"] - Execution error - PCRE limits exceeded (-8): (null). [hostname "mattlauder.com.au"] [uri "/old-content-redirect/gallery.php"] [unique_id "V5GB@EANwBYAADnBITUAAAB5"] -
您的主机正在使用自定义的 mod_security 规则,他们可能有某种过滤器来过滤乱七八糟的空间。很难说配置可能有什么问题,但显然存在配置问题,您的代码非常简单并且应该可以工作(并且在我尝试过的多台服务器上都可以)。也许是时候将问题提交给您的房东了。
标签: .htaccess loops redirect https spaces