web-dev-qa-db-ja.com

.htaccess RewriteRuleが機能しないデバッグ方法

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

  • .htaccessファイルがApacheによって読み取られ、従われているかどうかを確認するにはどうすればよいですか? 「機能している」というエコーメッセージを書くことができますか?書いた場合、その行はどこにエコーアウトされますか?
  • .htaccessファイルが使用されていない場合、Apacheで使用するにはどうすればよいですか?
  • .htaccessが使用されているが、RewriteRuleがまだ効果を発揮しない場合、デバッグするためにさらに何ができますか?
112
macha

.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 9 Levelに高い値を使用すると、Apacheサーバーの速度が大幅に低下します。デバッグの場合にのみ、2を超えるレベルで書き換えログファイルを使用してください。レベル9は、ほぼすべてのrewritelogの詳細を記録します。


更新

Apache 2.4では状況が変わりました。

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

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

LogLevelの詳細については、 LogLevel Directive を参照してください

あなたは達成できます

RewriteLog "/path/to/rewrite.log"

今このように

LogLevel debug rewrite_module:debug
141
ThinkingMonkey

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

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

deny from all

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

46
caitriona

一般に、.htaccessの変更には目に見える効果があります。効果がない場合は、次のような設定Apacheファイルを確認してください。

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

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

AllowOverride All

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

32
jgpATs2w

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

DirectoryIndex test.html

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

5
Cez

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

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

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

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

変数 を出力して、参照している値を確認するために参照しています。

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

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

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

ハッピー.htaccessデバッグ!

3
PeterA

使用できる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 -Indexesdeny from allなどの単純なディレクティブにより、.htaccessが正常に機能していることが確実になります。

3
Abhishek Gurjar

Htaccessの書き換えルールをテストするには、ルールを適用するURLを入力し、htaccessの内容を大きな入力領域に配置して、[テスト]ボタンを押します。

http://htaccess.mwl.be/

1
Ganesh Kandu