多くの投稿者は、.htaccess
ファイル内のRewriteRuleおよびRewriteCondステートメントのデバッグに問題があります。これらのほとんどは共有ホスティングサービスを使用しているため、ルートサーバー構成にアクセスできません。多くの回答者が示唆するように、.htaccess
ファイルの書き換えを回避できず、RewriteLogLevelを有効にすることもできません。また、.htaccess
固有の落とし穴や制約については十分にカバーされていません。ローカルテストLAMPスタックの設定には、ほとんどの学習曲線が必要です。
ここに私のQは、どのように我々は、彼らがいることをお勧めしているので、デバッグ自分のルールを自分自身。以下にいくつかの提案をします。他の提案をいただければ幸いです。
mod_rewriteエンジンが
.htaccess
ファイルを循環することを理解してください。エンジンはこのループを実行します:do execute server and vhost rewrites (in the Apache Virtual Host Config) find the lowest "Per Dir" .htaccess file on the file path with rewrites enabled if found(.htaccess) execute .htaccess rewrites (in the user's directory) while rewrite occurred
そのため、ルールは繰り返し実行され、URIパスを変更すると、他の
.htaccess
ファイルが存在する場合、そのファイルが実行される可能性があります。したがって、必要に応じて、RewriteCond
ルールの起動を停止するために追加でこのループを終了してください。また、.htaccess
明示的にマルチレベルのルールセットを使用する意図がない限り、下位レベルの書き換えルールセットを削除します。各Regexpの構文が正しいことを確認するには、一連のテストパターンに対してテストを行い、それが有効な構文であり、十分な範囲のテストURIで意図したとおりに機能することを確認します。詳細については、以下の回答を参照してください。
テストディレクトリにルールを段階的に構築します。 「
.htaccess
パス機能で最深部のファイルを実行する」を利用して、メインのルールを台無しにしてサイトの動作を停止することなく、個別のテストディレクトリ(ツリー)をセットアップし、ここでルールセットをデバッグできます。これは失敗を個別のルールにローカライズする唯一の方法であるため、一度に1つずつ追加する必要があります。ダミースクリプトスタブを使用して、サーバーと環境変数をダンプします。(リスト2を参照)たとえば、アプリでこれを使用している場合は、
blog/index.php
これをにコピーtest/blog/index.php
して、test
サブディレクトリーでブログのルールをテストするために使用できます。環境変数を使用して、書き換えエンジンが置換文字列を正しく解釈することを確認することもできます。例:RewriteRule ^(.*) - [E=TEST0:%{DOCUMENT_ROOT}/blog/html_cache/$1.html]
phpinfoダンプでこれらのREDIRECT_ *変数を探します。ところで、私はこれを使用し、自分のサイトで
%{ENV:DOCUMENT_ROOT_REAL}
代わりに使用する必要があることを発見しました。リダイレクタループの場合、 REDIRECT_REDIRECT_ *変数は前のパスをリストします。等..ブラウザが誤った301リダイレクトをキャッシュすることで噛まれないようにしてください。以下の回答を参照してください。これについては、Ulrich Palhaに感謝します。
書き換えエンジンは内カスケード接続ルールに敏感らしい
.htaccess
(ここである、コンテキストRewriteRule
I内部サブ要求にバグが見つかりましたように、置換をもたらし、これはさらにルールにも下がる)(1) 、及び誤ったPATH_INFOをしばしば可能な処理[NS]、[L]、および[PT]フラグを使用して防止する。
コメントや提案はありますか?
リスト1-phpinfo
<?php phpinfo(INFO_ENVIRONMENT|INFO_VARIABLES);