使用 mod 重寫和 URL 編碼字元清理 URL 會導致 404?

使用 mod 重寫和 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/articlehttp://example.com/category%2farticle(不是自訂404頁面)

我沒想到會這樣……為什麼會發生這種事?有辦法解決嗎?

答案1

URLhttp://example.com/category/articlehttp://example.com/category%2farticle不相等。根據RFC 2616 §3.2.3、保留字元具有特殊意義(畢竟,這就是 URL 轉義的全部意義)。 RFC 2396 §2.2列出/這樣的保留字元。在 HTTP URL 的上下文中,/分隔路徑元素,%2f而是文字斜線。

在阿帕奇中,AllowEncodedSlashes On將防止請求立即被 404 拒絕。

相關內容