Apache mod_rewriteをデバッグする方法


171

mod_rewriteには2つの主な問題があります。

1)無効なルールがある場合、意味のあるエラーは報告されません

ここに画像の説明を入力してください

2)各変更を確実にテストするには、クロムのキャッシュを消去する必要があります。これはロケットサイエンスではありませんが、Ctrl + Shift + Deleteを押してから[OK]をクリックし、ウィンドウを閉じてリロードする必要があります。

どんな教祖がmod_rewriteコードを効率的に管理するために彼らの秘密を喜んで共有してくれるかどうか知りたいのですが。


1
PUKは、参照stackoverflow.com/questions/9153262/...私はstanbdardトリックのいくつかを議論します。
TerryE 2012年

回答:


283

1つのトリックは、書き換えログをオンにすることです。これをオンにするには、これらの行は、あなたのApacheのメイン設定または(現在の仮想ホストファイルにしようとしない.htaccess。)

RewriteEngine On
RewriteLog "/var/log/apache2/rewrite.log"
RewriteLogLevel 3

Apache httpd 2.4以降、mod_rewriteの RewriteLogおよびRewriteLogLevelディレクティブは、新しいモジュールごとのロギング構成に完全に置き換えられました。

LogLevel alert rewrite:trace6

81
これを.htaccessに入れることはできません。VirtualHost構成に配置する必要があります。
Attila Szeremi 2013年

7
あなたは持っている必要がありRewriteEngine Onますだけで(私が行ったように)、それを有効にした場合、あまりにもするのでそこにセクションを.htaccessファイルし、何も記録されません。
chacham15 2013年

12
ログファイルはApache 2.4のどこにありますか?
Charles John Thompson III

4
2.4のログ項目は、関連するエラーログにあります。これは構成によって異なる場合がありますが、Debian / Ubuntuのデフォルトのセットアップでは、/ var / log / apache2 / error.logにあります
Josiah

10
プロのヒント:書き換えログを必ずオフにしてください。特に本番サーバーでは、忘れるとハードディスクをすぐにいっぱいにしてしまいます。
John Hunt

132

Benが述べたLogRewriteディレクティブは、Apache 2.4では使用できなくなりました。代わりにLogLevelディレクティブを使用する必要があります。例えば

LogLevel alert rewrite:trace6

http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html#loggingを参照してください


22
これに関連するログファイルはどこにありますか?
Charles John Thompson III

8
@CharlesJohnThompsonIII-ログファイルはエラーログです(ErrorLogディレクティブで指定)。:ドキュメントごとに、あなたはgrepを持つだけ書き換えメッセージを取得することができますtail -f error_log|fgrep '[rewrite:'
billynoah

1
Apacheを再起動することを忘れないでください
会計士م

1
AllowOverride設定されていることを確認する必要がありましたAll
マイケル

25

基本的なURL解決では、手動のブラウザではなく、wgetまたはのようなコマンドラインフェッチャーを使用curlしてテストを行います。その後、キャッシュをクリアする必要はありません。上向き矢印とシェルでEnterキーを押すだけで、テストフェッチを再実行できます。


14
もう1つのトリックは、Chromeの「ポルノモード」(Ctl + Shift + N)を使用することです。ウィンドウを閉じると、キャッシュされたセッションコンテキストはすべて破棄されます。
TerryE 2012年

Firefoxの「プライベートセッション」も閲覧していると思います。しかし、これは個々のウィンドウごとのコンテキストです(
Kaz

2
AFAIK、Chrome、およびFfは、Ffがプライベートモードであるかどうかに関係なく単一のプロセスとして実行されるという点で異なります。Chromeでは、各タブまたはウィンドウは個別のプロセスとして実行され、個別にプライベートモードにすることができます。プライベートウィンドウ/タブを閉じると、そのコンテキストが破棄されます。
TerryE 2012年

1
FF用のPrivateTabアドオンはそれを行います。各タブは個別に機能します。
Javid

このメソッドはリダイレクトも表示します!マシンのapache設定ファイルにアクセスできない人にはうれしいです。
Geof Sawaya 2017

14

htaccessテスターがあります。

これは、特定のURLに対してどの条件がテストされ、どの条件が基準を満たし、どのルールが実行されたかを示します。

しかし、いくつかの不具合があるようです。


2
私にとっては、コードが何もない最後の行に緑の実行ルールが表示されました。
アンディ

@thombrより正確にできますか?リンクが機能しない?またはツール?正確に何が機能しないのですか?そして、なぜそれがこの質問の文脈で関係があるのですか?
アンディ

1
これは、URLが期待どおりに変換されていることを示しています...しかし、実際のサーバーでは、404
Michael

@michaelは、テストされたルールが構成に存在する唯一のものですか?mod_rewriteは実際にインストールされ、アクティブですか?
アンディ

オーバーライドが有効になっていないことが判明
Michael

3

ベンの答えに基づく、Linux(私の場合はDebian)でapacheを実行するときに次のことができます。

最初にファイルrewrite-log.loadを作成します

/etc/apache2/mods-availabe/rewrite-log.load

RewriteLog "/var/log/apache2/rewrite.log"
RewriteLogLevel 3

次に入力してください

$ a2enmod rewrite-log

に続く

$ service apache2 restart

そして、書き換えルールのデバッグが終了したら

$ a2dismod rewrite-log && service apache2 restart


これは機能しませんでした。sandino @ envy:〜$ sudo service apache2 restartを取得* Webサーバーapache2の再起動[失敗] * apache2 configtestが失敗しました。コンフィギュレーションテストの出力であった:AH00526:/etc/apache2/mods-enabled/rewrite-log.loadの1行目に構文エラー:無効なコマンド「はRewriteLog」、おそらくサーバ構成に含まれていないモジュールによって、スペルミス、または定義された
サンディノ

3
@sandino、実行しているApacheのバージョンは何ですか?この構文は2.4で変更されたようです。代わりに使用してください。LogLevel warn rewrite:trace8またはLogLevel info rewrite:trace8、8は1〜8の任意の数字にできます
insaner
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.