Apacheで本当に奇妙な動作が発生しました。私は標準を持っています。 "PHPはファイルやディレクトリではないすべてを処理します"リライトセットアップ。urlにエンコードされたスラッシュが含まれていると、.htaccessが無視される
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
URLがエンコードされたスラッシュ(/)で%2F
を、含まれている場合を除き、を期待通り、この作品。これが起こるたびに、Apacheは404で応答します。これらのパスは存在しないため論理的です。しかし私が理解できないことは、私の.htaccess
の書き換えルールが無視される理由です。
TL; DR
GET /Foo/bar/baz
は私のPHPスクリプト
GET /Foo/bar%2Fbaz
によって提供されるには、Apacheで提供しています。
これは悪いデフォルト動作のようです。この予約文字が別の特殊目的のために使用されるURIスキームでは、 '%2F'と'/'を区別することだけが理にかなっています。これはルールではなく例外になるでしょう。アプリでこのようなスキームが発生すると、 '? '文字の後にURLのクエリ部分で使用される可能性が高くなります。 – Kaz