.htaccess を設置したフォルダがあり、その階層以下へのアクセスを1つの index.php にリライトしたいと考えています。
可能なら RewriteBase を使用せずに .htaccess と同階層の index.php で処理したいため、次のようにしました。
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$ RewriteRule ^(.*) - [E=BASE:%1] RewriteRule ^ %{ENV:BASE}/index.php [L] </IfModule>
これは次のエラーになります。
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Apacheのエラーログにも特に何かが追記されている様子がありませんでした。
また、実際にファイルが存在する場合そのファイルに直接アクセスできてしまいますが、それも禁止して index.php に集約する必要があります。
どのようにすれば正しく動作させることができるのでしょうか?
追記
エラーの原因自体は転送先の index.php 自体もさらに index.php に転送されることになり、無限ループが発生してしまっていることでした。
RewriteCond %{REQUEST_URI} !index.php$
を追記することに Internal Server Error は解消しますが、このままではすべての index.php ファイルにアクセスできてしまいます。
直下の index.php ファイルにだけRewriteを除外しなければならないのですが、RewriteCond %{REQUEST_URI} !(^%{ENV:BASE}/index.php$)
のような書き方はできない様子でした。
.htaccessと同じ階層にある index.php だけはRewrite処理から除外するにはどのように変更すればいいのでしょうか?