.htaccess RewriteRuleが機能しないことをデバッグする方法


115

何も実行していないファイルを持ってRewriteRule.htaccessます。これをトラブルシューティングするにはどうすればよいですか?

  • .htaccessファイルがApacheによって読み取られ、遵守されているかどうかを確認するにはどうすればよいですか?「書き込んでいる」というエコーメッセージを書き込むことはできますか。書き込んだ場合、その行はどこにエコー出力されますか?
  • .htaccessファイルが使用されていない場合、どうすればApacheで使用できますか?
  • .htaccessが使用されているのにRewriteRule効果がない場合、デバッグのためにさらに何ができますか?

回答:


144

.htaccess たとえばfoo barsakjnaskljdnas htaccessで認識されないキーワードにジャンク値を入力して、URLにアクセスしてください。それが機能している場合は、

500内部サーバーエラー

内部サーバーエラー

サーバーで内部エラーまたは設定ミスが発生し、リクエストを完了できませんでした...

すぐにそれを置くことをお勧めしますRewriteEngine on


あなたはあなたのマシンにいるので。私はあなたがApache .confファイルにアクセスできると思います。

.confファイルを開き、次のような行を探します。

LoadModule rewrite_module modules/mod_rewrite.so

コメント(#)の場合は、コメントを外してApacheを再起動します。


ログの書き換え

RewriteEngine On
RewriteLog "/path/to/rewrite.log"
RewriteLogLevel 9

上記の3行をに入れますvirtualhost。httpdを再起動します。

RewriteLogLevel 9Levelに高い値を使用すると、Apacheサーバーが劇的に遅くなります。デバッグのためにのみ、2より大きいレベルで書き換えログファイルを使用してください!レベル9は、ほとんどすべてのrewritelog詳細を記録します。


更新

Apache 2.4での変更点:

FROM 2.2から2.4へのアップグレード

RewriteLogRewriteLogLevelディレクティブは削除されました。この機能は、LogLevelディレクティブを使用してmod_rewriteモジュールのログの適切なレベルを構成することで提供されるようになりました。mod_rewriteロギングセクションも参照してください。

LogLevelの詳細については、LogLevelディレクティブを参照してください

あなたは達成することができます

RewriteLog "/path/to/rewrite.log"

このようにして

LogLevel debug rewrite_module:debug

さて、問題は、.htaccessファイルにリライタを追加しようとしていますが、何らかの理由でそれを使用していません。
macha

@machaは上記の方法を試してください。内部サーバーエラーが発生した場合は、mod_rewrite(.htaccess)が有効になっていることを意味します。共有ホストにいますか?
ThinkingMonkey

いいえ、自分のローカルホストで作業しています。.htaccessファイルがいつ読み込まれるかわかりますか?私はアパッチがこれを最初に読むでしょう
macha

@macha .htaccessファイルはロードされません。それらは、そのフォルダーに存在するページにアクセスしようとするときに、Apacheによって(存在する場合)アクセスされます。
ThinkingMonkey

私の質問は、誰かがWebページを要求した場合、Apacheが直接サーバー側のスクリプトに移動するのか、それともそのフォルダで.htaccessファイルを探してから続行するのかという質問でした。
macha

52

「いくつかのジャンク値を入力してください」という回答ではうまくいかず、入力したジャンクにもかかわらず、私のサイトはロードされ続けました。

代わりに、.htaccessファイルの先頭に次の行を追加しました。

deny from all

これにより、.htaccessが取得されているかどうかがすぐにわかります。.htaccessが使用されている場合、そのフォルダー内のファイルはまったく読み込まれません。


4
これは、確認中に数秒間何も機能しないことを気にしない場合の最も簡単なテストです。
Mordred、2015年

1
はい、私が作業していたサイトが.htaccessファイルを使用していないことを確認するのに約1秒かかりました。
bon

1
おかげで、魅力のように動作します:)デバッグの時間を節約できました!
Martijn van Hoof

32

一般に、.htaccessの変更は目に見える影響を与えるはずです。効果がない場合は、次のような構成Apacheファイルを確認します。

<Directory ..>
    ...
    AllowOverride None
    ...
</Directory>

に変更する必要があります

AllowOverride All

また、.htaccessファイルのディレクティブを変更することもできます。


ありがとう。メインのapache2.confファイルで、ディレクトリツリー/ var / wwwの関連セクションを見つけました
Tim Richardson

6

おそらくより論理的な方法は、ファイル(たとえばtest.html)を作成し、コンテンツを追加してから、それをインデックスページとして設定することです。

DirectoryIndex test.html

ほとんどの場合、.htaccessルールは、ディレクトリ/ファイルレベルで動作するApache構成をオーバーライドします


4

3つの質問の最初の質問に答えるために、.htaccessファイルが機能しているかどうかを確認する簡単な方法は、.htaccessファイルの上部でカスタムエラーをトリガーすることです。

ErrorDocument 200 "Hello. This is your .htaccess file talking."
RewriteRule ^ - [L,R=200]

2番目の質問ですが、.htaccessファイルが読み取られていない場合は、サーバーのメインのApache設定がにAllowOverride設定されている可能性がありますNone。Apacheのドキュメントには、そのためのトラブルシューティングのヒントと、.htaccessの効果を妨げる可能性があるその他のケースが含まれています。

最後に、3番目の質問に答えるために、書き換えルールで参照している特定の変数をデバッグする必要がある場合、またはルールとは別に評価したいを使用している場合は、次の操作を実行できます。

出力 参照している変数をして、期待した値が含まれていることを確認します。

ErrorDocument 200 "Request: %{THE_REQUEST} Referrer: %{HTTP_REFERER} Host: %{HTTP_HOST}"
RewriteRule ^ - [L,R=200]

式を個別にテストして、<If>ディレクティブに。これにより、式が適切に記述されていること、または期待どおりに一致していることを確認できます。

<If "%{REQUEST_URI} =~ /word$/">
    ErrorDocument 200 "Your expression is priceless!"
    RewriteRule ^ - [L,R=200]
</If>

幸せな.htaccessデバッグ!


3

使用できるapache binディレクトリにアクセスできる場合は、

httpd -M ロードされたモジュールを最初にチェックします。

 info_module (shared)
 isapi_module (shared)
 log_config_module (shared)
 cache_disk_module (shared)
 mime_module (shared)
 negotiation_module (shared)
 proxy_module (shared)
 proxy_ajp_module (shared)
 rewrite_module (shared)
 setenvif_module (shared)
 socache_shmcb_module (shared)
 ssl_module (shared)
 status_module (shared)
 version_module (shared)
 php5_module (shared)

その後、Options -Indexesまたはdeny from all.htaccessが正常に動作していることを確認する単純なディレクティブが確定します。



-1

.htaccessファイルに迷惑メールを入れて、Apacheをリロードしてみてください。Apacheが起動しない場合は、その動作を確認できます。ジャンクを削除し、.htaccessを正しく設定したことをロードする場合は、Apacheをリロードします。


7
Apacheは、ページリクエストがあるまで.htaccessをチェックしないため、不正な.htaccessがある場合、起動または実行に失敗しないと思います。
Andrew
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.