モッド書き換えと URL エンコードされた文字を含むクリーンな URL により 404 が発生しますか?

モッド書き換えと URL エンコードされた文字を含むクリーンな URL により 404 が発生しますか?

mod_rewriteクリーンな URL とカスタム 404 ページを取得するためにを使用している Web サイトがあります。.htaccessファイルは次のようになります。

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

私を困惑させるのは、URL に%2F(URL エンコードされた/) が含まれている場合、サーバーが 404 を強制するように見えることです。たとえば、http://example.com/category/article通常の記事ですが、http://example.com/category%2farticleサーバーが生成した 404 ページが表示されます (カスタム 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はリテラルのスラッシュです。

Apacheでは、AllowEncodedSlashes Onリクエストが 404 で即座に拒否されるのを防ぎます。

関連情報