mod_rewirte の -f、-d

RewriteCond の -f、-d がどーしても効かない... と悩んでました。効かなかった設定はコレ。

RewriteCond %{REQUEST_URI}          ^/(support|news)/
RewriteCond %{REQUEST_FILENAME}     !-f
RewriteCond %{REQUEST_FILENAME}     !-d
RewriteRule ^/(support|news)/(.*)$  /foo/bar/baz/hiki/app/hiki.cgi?$2 [L]

先月末くらいに躓いたのですが少し忙しかったので放置して(別のルールで対処して)置いたのですが、ちょっと時間ができたので再チャレンジ。ググったりしてやっと上手くいきました :)。

RewriteCond %{REQUEST_URI}          ^/(support|news)/
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME}     !-f
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME}     !-d
RewriteRule ^/(support|news)/(.*)$  /foo/bar/baz/hiki/app/hiki.cgi?$2 [L]

そう、%{DOCUMENT_ROOT} が無かったのでした。分かってしまえば当たり前*1なんですが、気づかないと.... ですね。

RewriteBase 使えば良いのでしょうが、他にも幾つか書き換えているのでベタにしちゃいました。

*1:REQUEST_FILENAME だけじゃパスが分かんないですからね