状況
こんにちは、拡張子のない PHP ファイルに関する PHP の期待/デフォルトの動作、および/またはリクエストを処理する (したい) 実際のファイルを「通過する」URL リクエスト (つまり、PHP のデフォルトの「フォールバック」アクションの前) について混乱しています。完全に 404-ing に頼っています)。これが私の状況です:
ローカル サーバー (非常に基本的な PHP 5.5.1 セットアップで nginx 1.5.3 を実行) のディレクトリ構造は次のようになります。
/index
/index.php
/other
/other.php
/rootdir/index
/rootdir/index.php
/rootdir/other
/rootdir/other.php
8 つのファイルすべての内容は同じです。
<?php
echo $_SERVER['PHP_SELF'] . ', ' . $_SERVER['REQUEST_URI'];
?>
しかし、それぞれのエンドポイントに到達すると、(私にとっては) 奇妙な結果が得られます。
リサーチ
GET /index.php
'/index.php, /index.php' # Makes sense...
GET /index.php/something_else
'/index.php, /index.php/something_else' # Also makes sense...
GET /index/something_else
'/index.php, /index/something_else' # Let's call this ANOMALY 1... (see below)
GET /something_else
'/index.php, /something_else' # ANOMALY 2
GET /other.php
'/other.php, /other.php' # Expected...
GET /other.php/something_else
'/index.php, /other.php/something_else' # ANOMALY 3
GET /rootdir/index.php
'/rootdir/index.php, /rootdir/index.php' # Expected...
GET /rootdir/index.php/something_else
'/index.php, /rootdir/index.php/something_else' # ANOMALY 4
GET /rootdir/other.php
'/rootdir/other.php, /rootdir/other.php' # Expected...
GET /rootdir/other.php/something_else
'/index.php, /rootdir/other.php/something_else' # ANOMALY 5
私の理解では、サーバーは/index.php
、ユーザーが要求 URI で探しているものを見つけることができない場合にリダイレクトします。それは理にかなっています...私が理解していないのは次のとおりです。
- 専用の 404 ページをセットアップしていないにもかかわらず、なぜこれを実行するのか (
/index.php
404 する前に試すように指示しませんでした。何かが見つからない場合は、合法的で非カスタムの 404 ページを表示する必要があります。または処理できません. 何かが見つからなかった場合、デフォルトのサーバー 404 ページを表示する必要があると考えました.明らかに常にそうであるとは限りません...?) /rootdir/index.php
サブディレクトリ内に何かが見つからない場合に試行しないのはなぜですか/rootdir/
。
質問
見つからないアドレスに関して、誰かがPHPのロジックが何であるかを明らかにすることができますか(または、nginxが行っているのかもしれません;私はまだそれを理解できていません)? なぜ私は自分が見ているものを見ているのですか? (具体的には、異常 #4 と #5 に関して。
/rootdir/index.php
「404」の処理に使用することを期待していたか、実際の 404 ページを期待していました。フォールバック/index.php
は予想外でした。)直接的な帰結 (因果関係?) の質問として、"下" で発生するヒットを処理する拡張機能のない PHP ファイルをシミュレートするにはどうすればよいですか(たとえば、異常 #1 の場合。 、 mod_rewriting 、またはリダイレクトに依存せずに?
.htaccess
それともばかげた質問ですか?:-)
参考文献
Apache に依存せずに/some_dir/index.php/fake_subdir
and (つまり、異なる「フォールバック ハンドラー」)のようなリクエストを処理するためのカスタム実装を展開しようとしていますが、PHP (または nginx?) のデフォルトのフォールバック動作の背後にあるロジックがわかりません。/some_other_dir/index.php/fake_subdir
これらのページは、主にこの質問が由来する場所です。