Edited at

Apacheのrewritelogの出力方法(Apache2.2とApache2.4で違います)

RewriteCondRewriteRuleの条件をデバッグするときによく使うのですが、

その都度方法を調べてしまっているので備忘も兼ねて書いちゃいます。

Apache2.2Apache2.4でやり方が全然違くなってしまいました。

これからはほとんど2.4になると思うので、先に2.4の方法を記載します。


Apache2.4 での設定方法


設定方法

Apacheのconfに以下の記述を追加します。

LogLevel debug rewrite:trace8


軽く説明

Apache2.4からはRewriteLogという独立したログはなくなり、

coreモジュールのLoglevelディレクティブを使って指定する方法に変更されました。

出力ファイルは指定できず、他のログと一緒にerror_logに出るようになります。

レベルはtrace1 ~ trace8 までで、数値が大きくなるほど冗長になります。

膨大にログが出て重くなるので、デバッグ以外の目的で trace2 以上を使うのは止めた方がよいです。


公式ドキュメント

http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html


Apache2.2 での設定方法


設定方法

Apacheのconfに以下の記述を追加します。

RewriteLog "/tmp/httpd.rewrite.log"

RewriteLogLevel 9


軽く説明

RewriteLogLevel0~9まであり、ログの詳細レベルを指定します。

9が一番詳細で、0だと何も出力しません。


注意点(2.2と2.4共通)


  • 基本的にはVirtualHosts内に書くことが多いと思います。僕はVirtualHosts外に書いたことがありません。


  • .htaccessでは書けません。書いちゃうとInternal Server Errorになります。

  • Logが肥大化しすぎてサーバーのパフォーマンス低下を引き起こすため、デバックが終わったら設定を戻しましょう。