web-dev-qa-db-ja.com

すべてのディレクトリとサブディレクトリで1つのインデックスファイルを使用する

index.phpファイルがあります。このファイルは、それが置かれているディレクトリのコンテンツを処理し、ブラウザに出力をレンダリングします。

問題は、サービスが提供されるはずのディレクトリ構造がかなり複雑で、多くのディレクトリとサブディレクトリがあることです。 index.phpのコピーをすべてのサブディレクトリに配置する気はありません。

それらをサポートするシステムでシンボリックリンクを使用できることは知っていますが、階層全体を横断して、他にシンボリックリンクが存在しない場合は、問題のインデックスファイルへのリンクを配置するのは人間の仕事ではありません。また、すべてのシステムが実際にシンボリックリンクをサポートしているわけではありません。

要求されたディレクトリにインデックスファイルが存在しない場合、指定されたindex.phpを使用する必要があることをWebサーバー(Apache、nginx、..)に伝える方法はありますか?

2
silverdr

私はあなたが何を求めているのか理解していますが、すべてのディレクトリにindex.phpファイルが必要な理由を理解することはできません(典型的なPHPアプリケーションのプログラミング慣行に従っている場合)。

すべてのサブディレクトリからルートindex.phpファイルを参照する必要がある場合、サーバーレベルでmod_rewriteが最も簡単な方法です。これはサーバーに依存しませんが、質問するかもしれませんが、サーバーが常にindex.phpファイルを参照するようにする方法の例については、この記事を参照してください: https://stackoverflow.com/questions/8595964/redirect-all-traffic-to-index-php-using-mod-rewrite

1
JMC

ドキュメントルートの下のディレクトリにインデックスファイルが存在しない場合、指定されたindex.phpを使用する必要があることをWebサーバー(Apache、nginx、..)に伝える方法はありますか?

はい、Apacheでは、Apache構成(または.htaccessファイル)のDirectoryIndexディレクティブでこれを制御できます。例えば:

DirectoryIndex index.php /index.php

ファイルシステムディレクトリをリクエストするとき、これはそのディレクトリ内のindex.phpが存在する場合はそれを提供し、そうでなければ/index.phpが提供されます(ドキュメントルートのindex.php)。

Nginxには、単にindexと呼ばれる同様のディレクティブがあるようです。
参照: https://serverfault.com/a/402949/49157

0
MrWhite