RewriteCond
やRewriteRule
の条件をデバッグするときによく使うのですが、
その都度方法を調べてしまっているので備忘も兼ねて書いちゃいます。
Apache2.2
とApache2.4
でやり方が全然違くなってしまいました。
これからはほとんど2.4になると思うので、先に2.4の方法を記載します。
Apache2.4 での設定方法
設定方法
Apacheのconfに以下の記述を追加します。
LogLevel debug rewrite:trace8
軽く説明
Apache2.4
からはRewriteLog
という独立したログはなくなり、
coreモジュールのLoglevel
ディレクティブを使って指定する方法に変更されました。
出力ファイルは指定できず、他のログと一緒にerror_log
に出るようになります。
レベルはtrace1 ~ trace8
までで、数値が大きくなるほど冗長になります。
膨大にログが出て重くなるので、デバッグ以外の目的で trace2 以上を使うのは止めた方がよいです。
公式ドキュメント
Apache2.2 での設定方法
設定方法
Apacheのconfに以下の記述を追加します。
RewriteLog "/tmp/httpd.rewrite.log"
RewriteLogLevel 9
軽く説明
RewriteLogLevel
は0~9
まであり、ログの詳細レベルを指定します。
9
が一番詳細で、0
だと何も出力しません。
注意点(2.2と2.4共通)
- 基本的には
VirtualHosts
内に書くことが多いと思います。僕はVirtualHosts外
に書いたことがありません。 -
.htaccess
では書けません。書いちゃうとInternal Server Errorになります。 - Logが肥大化しすぎてサーバーのパフォーマンス低下を引き起こすため、デバックが終わったら設定を戻しましょう。