何もしていない.htaccess
ファイルにRewriteRule
があります。これをトラブルシューティングするにはどうすればよいですか?
.htaccess
ファイルがApacheによって読み取られ、従われているかどうかを確認するにはどうすればよいですか? 「機能している」というエコーメッセージを書くことができますか?書いた場合、その行はどこにエコーアウトされますか?.htaccess
ファイルが使用されていない場合、Apacheで使用するにはどうすればよいですか?.htaccess
が使用されているが、RewriteRule
がまだ効果を発揮しない場合、デバッグするためにさらに何ができますか?.htaccess
にジャンク値を入力します。 foo bar
、sakjnaskljdnas
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
「ジャンク値を入力してください」という答えは私にとってはうまくいきませんでした。入力されたジャンクにもかかわらず、私のサイトはロードし続けていました。
代わりに、.htaccessファイルの先頭に次の行を追加しました。
deny from all
これにより、.htaccessが取得されているかどうかがすぐにわかります。 .htaccessが使用されている場合、そのフォルダー内のファイルはまったく読み込まれません。
一般に、.htaccessの変更には目に見える効果があります。効果がない場合は、次のような設定Apacheファイルを確認してください。
<Directory ..>
...
AllowOverride None
...
</Directory>
に変更する必要があります
AllowOverride All
また、.htaccessファイル内のディレクティブを変更できます。
おそらく、より論理的な方法は、ファイル(test.htmlなど)を作成し、コンテンツを追加してから、インデックスページとして設定しようとすることです。
DirectoryIndex test.html
ほとんどの場合、.htaccessルールは、ディレクトリ/ファイルレベルで動作するApache構成をオーバーライドします
3つの質問のうち最初の質問に答えるには、.htaccessファイルが機能しているかどうかを確認する簡単な方法は、.htaccessファイルの上部でカスタムエラーをトリガーすることです。
ErrorDocument 200 "Hello. This is your .htaccess file talking."
RewriteRule ^ - [L,R=200]
2番目の質問では、.htaccessファイルが読み取られていない場合、サーバーのメインApache構成のAllowOverride
がNone
に設定されている可能性があります。 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デバッグ!
使用できる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が正常に機能していることが確実になります。
Htaccessの書き換えルールをテストするには、ルールを適用するURLを入力し、htaccessの内容を大きな入力領域に配置して、[テスト]ボタンを押します。