找回密码
 创建账号

httpd mod_rewrite .htaccess %2F %5C 404

php 发表于 2020/2/27 17:28 | 显示全部楼层 |阅读模式
当网页地址 URL REQUREST_URI 部分有 %2F 或 %5C 时,Apache 出现 404 错误,找不到文件,伪静态 mod_rewrite 引擎 RewriteRule 不起作用,无论是在 httpd 配置文件中还是在 .htaccess 中的伪静态规则都无效,在 rewrite engine 解析之前 Apache 就已经抛出了 404 错误,%2F 是编码后的 /,%5C 是编码后的 \,它们都是目录分隔符。

Apache Http Server 有一个配置 AllowEncodedSlashes ,默认值是 Off ,允许的值是 On Off NoDecode 之一,Apache Httpd 2.3.12 之前不支持 NoDeCode,如果使用默认值 Off,REQUREST URI 不允许有编码后的目录分隔符 / 和 \,也就是 %2F 和 %5C,如果值为 On,%2F 和 %5C 允许出现在 REQUREST_URI 中,并且分别会被解码为 / 和 \;如果值为 NoDecode,%2F 和 %5C 允许出现在 REQUREST_URI 中,并且不会被解析为 / 和 \,会原样保留,最终和值还是 %2F 和 %5C.


要想避免 URL 中 %2F %5C 导致 404 错误,可以将 AllowEncodedSlashes 的值设置为 On 或者 NoDecode,将值设置为 On,会增加服务器被攻击的风险,推荐值为 NoDecode.

值得注意的是,AllowEncodedSlashes 不能在 .htaccess 文件中修改,它只能在 server config 和 virtual host 中配置,也就是只能在服务器主配置和虚拟主机中配置。

手机版|轻松E站

轻松E站

快速回复 返回顶部 返回列表