SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 社員募集 ...

【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に設定して、何をどう書き換えて何を補ったり取り去ったりしているか観察するのがよい。

参考

http://wiki.apache.org/httpd/RewriteLogLevel

http://log.nissuk.info/2012/04/apache-rewritebase.html

関連するメモ

コメント