mod_rewriteには2つの主な問題があります。
1)無効なルールがある場合、意味のあるエラーは報告されません
2)各変更を確実にテストするには、クロムのキャッシュを消去する必要があります。これはロケットサイエンスではありませんが、Ctrl + Shift + Deleteを押してから[OK]をクリックし、ウィンドウを閉じてリロードする必要があります。
どんな教祖がmod_rewriteコードを効率的に管理するために彼らの秘密を喜んで共有してくれるかどうか知りたいのですが。
mod_rewriteには2つの主な問題があります。
1)無効なルールがある場合、意味のあるエラーは報告されません
2)各変更を確実にテストするには、クロムのキャッシュを消去する必要があります。これはロケットサイエンスではありませんが、Ctrl + Shift + Deleteを押してから[OK]をクリックし、ウィンドウを閉じてリロードする必要があります。
どんな教祖がmod_rewriteコードを効率的に管理するために彼らの秘密を喜んで共有してくれるかどうか知りたいのですが。
回答:
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
RewriteEngine On
ますだけで(私が行ったように)、それを有効にした場合、あまりにもするのでそこにセクションを.htaccess
ファイルし、何も記録されません。
Benが述べたLogRewriteディレクティブは、Apache 2.4では使用できなくなりました。代わりにLogLevelディレクティブを使用する必要があります。例えば
LogLevel alert rewrite:trace6
http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html#loggingを参照してください
tail -f error_log|fgrep '[rewrite:'
AllowOverride
設定されていることを確認する必要がありましたAll
!
基本的なURL解決では、手動のブラウザではなく、wget
またはのようなコマンドラインフェッチャーを使用curl
してテストを行います。その後、キャッシュをクリアする必要はありません。上向き矢印とシェルでEnterキーを押すだけで、テストフェッチを再実行できます。
ベンの答えに基づく、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
LogLevel warn rewrite:trace8
またはLogLevel info rewrite:trace8
、8は1〜8の任意の数字にできます