サブフォルダへの各リクエストを同じフォルダ内のindex.phpにリダイレクトするにはどうすればいいですか?
myserver.com/folder/subfolder1/test redirected to folder/subfolder1/index.php
myserver.com/folder/subfolder2/test redirected to folder/subfolder2/index.php
...
次のようにサブフォルダーごとに .htaccess を追加しました。
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ index.php [L,QSA]
親フォルダ内の 1 つの .htaccess を使用してリダイレクトしたいと思います。
Folder/
.htaccess <-- one redirection here
subfolder1/
index.php
subfolder2/
index.php
subfolder3/
index.php
...
subfolder n /
index.php
PS: すべてのサブフォルダーの名前は異なり、命名規則に従っていません。
答え1
DirectoryIndex
ルート ファイルで が正しく設定されていることを確認するだけです.htaccess
。(デフォルトでは になっていますindex.html
が、多くのディストリビューションindex.php
にも が含まれているため、何もする必要がない場合がよくあります。)
例えば:
DirectoryIndex index.php
index.php
これは、ディレクトリを直接要求したときに、Apache (mod_dir) に要求されたディレクトリ (相対 URL パスに注意) 内のファイルを検索するように指示します。
DirectoryIndex
ドキュメント (つまり) が見つからない場合はindex.php
、403 Forbidden が返されます (mod_autoindex が有効になっていて、ディレクトリ リストが無効になっていると仮定します (つまりOptions -Indexes
))。
これ以上追加する必要はありません。(実際に「外部リダイレクト」が必要な場合を除きます。)
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^.*$ index.php [L,QSA]
mod_rewriteを使用する必要はありません。実際、このルールはここでは何もしません。状態ディレクトリへのリクエストを明示的に除外します。
参照:
答え2
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.+)/.*$ $1/index.php [L,QSA]
答えを見つけました。このルールでは、ファイルが存在しない場合はすべてのフォルダーが index.php にリダイレクトされます。