.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 中的空格情况?