理想未来ってなんやねん

娘可愛い。お父さん頑張る。

存在するファイルはスルーしたい

mod_rewriteのお話。
ファイルが存在する場合はそのファイルを表示し、存在しない場合はindex.phpを表示するようにしたい。
よくある例が以下のようになっているが、実際にはうまく動かない。

RewriteEngine on
RewriteBase /
#ファイルが存在しない且つ、ディレクトリが存在しない場合は、index.phpを表示
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^$ /index.php [L,QSA]
RewriteRule ^(.*)$ /index.php?jb=$1 [L,QSA]

修正(2009/06/07)

挙動について解決しました。
[Apache][mod_rewrite]続:存在するファイルはスルーしたい


以下のように書くと期待通りに動作する。

RewriteEngine on
RewriteBase /
#ファイルが存在するか、ディレクトリが存在する場合は、そのファイルを表示する
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.* - [L]
#ファイルが存在しない且つ、ディレクトリが存在しない場合は、index.phpを表示
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^$ /index.php [L,QSA]
RewriteRule ^(.*)$ /index.php?jb=$1 [L,QSA]

これで目的は達成されるのだが、最初の例でなぜうまくいかないかが納得いかない。
この挙動について説明できる方がおられれば、ご教授いただけると幸いです。

The Definitive Guide to Apache mod_rewrite (Definitive Guides (Hardcover))

The Definitive Guide to Apache mod_rewrite (Definitive Guides (Hardcover))

Apacheクックブック 第2版 ―Webサーバ管理者のためのレシピ集

Apacheクックブック 第2版 ―Webサーバ管理者のためのレシピ集