You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache升级后Mod Rewrite的B/BNP Flag失效,报AH10411错误

解决Apache升级后AH10411错误:含空格URL重写失败

问题根源

Apache 2.4.51及后续版本强化了查询字符串的安全校验,禁止重写后的查询字符串直接包含空格或控制字符。你原配置中使用的%{REQUEST_URI}是Apache解码后的路径,其中的空格是真实空白字符而非编码后的%20,因此无论添加B或BNP flag,都会触发AH10411错误。

解决方案

改用%{THE_REQUEST}提取客户端发送的原始请求路径(保留编码后的%20),替代%{REQUEST_URI}。修改后的.htaccess配置如下:

<IfModule mod_rewrite.c>
RewriteEngine On

# 从原始请求行中提取编码后的路径部分
RewriteCond %{THE_REQUEST} ^[A-Z]+\s/([^\s?]+)\sHTTP/
# 排除真实存在的文件和目录
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# 将编码后的路径传递给QueryString,B flag确保特殊字符正确转义
RewriteRule ^ index.php?QueryString=/%1 [B,L]
</IfModule>

原理说明

%{THE_REQUEST}存储的是客户端发送的原始请求内容,格式类似GET /modulename/searchfuncname/filter,searchstring,quick%20fox%20jumps/ HTTP/1.1,其中空格保持%20编码状态。通过RewriteCond提取路径部分后拼接到查询字符串,最终传递给index.php的是编码后的路径,不会包含真实空格,从而绕过安全校验。

额外说明

  • 不建议修改Apache全局安全配置(如AllowEncodedSpace)放行空格,这会降低服务器安全性。
  • 若业务需要处理空格,可在index.php中对QueryString参数进行解码,获取原始空格内容。

内容的提问来源于stack exchange,提问作者Yaroslav Ustinovsky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 01:12:32