質問: Apacheのmod_rewriteによる設定でルートを除外したい DocumentRoot下に index.php abc.php というファイルと prg/ aaa/ というディレクトリがあり、 ~.jp/bbb など指定していないディレクトリ参照のアクセスの場合にmod_rewriteでprg内へrewriteして処理させたいと考えています。 (prgディレクトリ内はindex.phpとdef.phpのみ) 現在、 RewriteEngine On RewriteCond %{REQUEST_URI} !^/index.php RewriteCond %{REQUEST_URI} !^/abc.php RewriteCond %{REQUEST_URI} !/?prg/? RewriteCond %{REQUEST_URI} !/?aaa/? RewriteRule ^\/([0-9a-zA-Z_\-]+)\/? /prg/index.php [L] RewriteRule ^\/([0-9a-zA-Z_\-]+)\/index.php /prg/index.php [L] RewriteRule ^\/([0-9a-zA-Z_\-]+)\/def.php /prg/def.php [L] と定義したところ、 ~.jp/index.php:rewriteしない ~.jp/abc.php:rewriteしない ~.jp/aaa:rewriteしない ~.jp/aaa/:rewriteしない ~.jp/bbb:rewriteする ~.jp/bbb/:rewriteする ~.jp/bbb/def.php:rewriteする と希望通りなのですが、 ~.jp/ ~.jp というルート直下へアクセスした場合にrewriteされてしまいます。 どうすればこれを回避することができるでしょうか?
回答: > 指定していないディレクトリ参照のアクセスの場合にmod_rewriteでprg内へrewrite 「存在していないディレクトリ」ですね? 後半のテストの部分から、存在していないファイルへのアクセスのも場合も rewrite したいのだと思います。 今後もルートにファイルやディレクトリが増えないのなら、個別に書くのもアリかもしれませんが、態々個別に書くよりは 「存在しないファイルやディレクトリへのアクセス」の場合 rewrite する の方がわかり易くないですか? それとも、何か見落としている所があるでしょうか? ``` DirectoryIndex index.php RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^.*$ prg/index.php [L,QSA] ``` これでは思ったように機能しませんか?