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

Apache mod_rewrite如何匹配URL编码的查询字符串实现403拦截

问题原因

你当前使用的%{QUERY_STRING}变量存储的是原始未解码的查询字符串,所以参数名、参数值经过百分号十六进制编码后,无法匹配明文的mykey=myval规则。

解决方案

适配Apache 2.4及以上版本(无需额外全局配置)

直接使用mod_rewrite内置的unescape()函数对查询字符串解码后再匹配即可:

RewriteEngine On
# 先对整个查询字符串做URL解码,再匹配目标规则
RewriteCond "%{unescape:%{QUERY_STRING}}" "mykey=myval" [NC]
RewriteRule .* - [F,L]

适配Apache 2.2版本

需要先在Apache全局配置/虚拟主机配置段(不能放在.htaccess中)先声明解码映射:

RewriteMap unescape int:unescape

之后在对应站点的.htaccess或目录配置中使用和上面2.4版本完全相同的重写规则即可。

效果验证

配置后再测试编码的请求,都会正常返回403:

# 均返回403
curl -I 'http://localhost/?mykey=%6d%79%76%61%6c'
curl -I 'http://localhost/?%6d%79%6b%65%79=%6d%79%76%61%6c'

内容的提问来源于stack exchange,提问作者Vahid Pazirandeh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 20:39:03