我有一個網站,用於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頁面)
我沒想到會這樣……為什麼會發生這種事?有辦法解決嗎?
答案1
URLhttp://example.com/category/article
和http://example.com/category%2farticle
不相等。根據RFC 2616 §3.2.3、保留字元具有特殊意義(畢竟,這就是 URL 轉義的全部意義)。 RFC 2396 §2.2列出/
這樣的保留字元。在 HTTP URL 的上下文中,/
分隔路徑元素,%2f
而是文字斜線。
在阿帕奇中,AllowEncodedSlashes On
將防止請求立即被 404 拒絕。