【apache】rewriteの書き方例
問題
mod_rewrite の設定を、.htaccess じゃなくて httpd.conf に書くときどうしたらいい?
答え
.htaccess に設定すると、.htaccess の置かれている場所を考慮して処理されるらしいので、以下のように書けばよいのだが、
RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^.*$ example.php
httpd.conf に書きたい場合で、ファイルの有無を条件にするときは、以下のような感じでフルパスを明示してやる書き方などで期待した動作をするようになる。
RewriteEngine On RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d RewriteRule ^.*$ %{DOCUMENT_ROOT}/example.php$0
httpd.conf に書くときは、RewriteBase は効かない。.htaccessに書くとき用の機能。
RewriteBase は書き換え後のパスが相対パスの時に前に付けられるもので、マッチパターンには全く影響しない。
細かい挙動は LogLevel rewrite:trace4 などhttpd.confに設定して、何をどう書き換えて何を補ったり取り去ったりしているか観察するのがよい。
コメント