相关疑难解决方法(0)

AH10411 错误:空格和 %20 导致 Apache mod_rewrite 出现 403 Forbidden

.htaccess我今天更新了 Apache(至 2.4.56-1) ,以前可以正常工作的大量重写现在出现了 AH10411 错误,与查询中的空格有关。我正在努力寻找“适当”的解决方案。

用户单击一个链接,例如<a href='FISH%20J12345.6-78919'>clickme</a>- 您可以看到链接 URL 中的空格已被编码为%20

.htaccess相关服务器目录中的文件包含并执行以下相关指令:

RewriteRule ^(FISH\s*J[0-9\.]+-?\+?[0-9]+)$ myPage.php?sourceName=$1 [L,QSA]
Run Code Online (Sandbox Code Playgroud)

(在上面我检查的是空格,而不是%20,因为浏览器似乎在符合此规则之前将其转换为空格)。

在我更新 Apache 之前,这一直有效;现在用户收到 403 错误,我的 Apache 错误日志报告:

AH10411:重写的查询字符串包含控制字符或空格

这似乎是一个新错误,因为谷歌搜索什么也没找到!

编辑我的页面(例如)将空格更改为下划线并正确处理它并不是真正的选择,因为该设计旨在支持用户能够直接使用他们关心的对象的名称输入 URL。到目前为止,我发现的唯一解决方法有点难看,即在正则表达式中分别捕获源名称的两个部分,因此:

RewriteRule ^(FISH)\s*(J[0-9\.]+-?\+?[0-9]+)$ myPage.php?sourceName=$1+$2 [L,QSA]
                  ^   ^                                               ^^^
Run Code Online (Sandbox Code Playgroud)

(我$1%20$2最后尝试了一下,也导致了同样的错误。)

对此有更好的解决方案吗?即,当 URL 位于我想要捕获并作为参数传递给底层页面的字符串中时,我“应该”如何处理 URL 中的空格情况?

apache .htaccess mod-rewrite url-rewriting

42
推荐指数
2
解决办法
1万
查看次数

标签 统计

.htaccess ×1

apache ×1

mod-rewrite ×1

url-rewriting ×1