使用 mod rewrite 和 URL 编码字符清理 URL 会导致 404 吗?

使用 mod rewrite 和 URL 编码字符清理 URL 会导致 404 吗?

我有一个网站,用于mod_rewrite获取一些干净的 URL 和自定义 404 页面。我的.htaccess文件如下所示:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?clean_url=$1 [QSA,L]
</IfModule>

让我感到困惑的是,如果 URL 包含%2F(url-encoded /),服务器似乎会强制 404。例如,http://example.com/category/article这是一篇普通的文章,但随后http://example.com/category%2farticle给出了服务器生成的 404 页面。(不是自定义的 404 页面)

我没想到会这样……为什么会发生这种情况?有办法解决吗?

答案1

URLhttp://example.com/category/articlehttp://example.com/category%2farticle不相等。根据RFC 2616§3.2.3,保留字符具有特殊意义(毕竟,这是 URL 转义的全部意义所在)。 RFC 2396§2.2列出/这样的保留字符。在 HTTP URL 上下文中,/分隔路径元素,而 则%2f是文字斜杠。

在 Apache 中,AllowEncodedSlashes On将防止请求被立即以 404 代码拒绝。

相关内容