.htaccess はサブフォルダを対応する index.php にリダイレクトします。

.htaccess はサブフォルダを対応する index.php にリダイレクトします。

サブフォルダへの各リクエストを同じフォルダ内の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 にリダイレクトされます。

関連情報