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]
これでは思ったように機能しませんか?