2011-09-15 6 views
3

これは簡単な質問ですが、私は二重チェックしたいと思いました。.htaccessが解析され、RewriteRuleディレクティブが何回実行されますか?

実行回数は何回ですか?.htaccess?私は、ファイルの残りのためRewriteRule年代の実行を停止し理解し、それは、すべて最初からやり直すんよう

RewriteRule ^.*$ bla [L] 
RewriteRule bla foo [L] 

[L]

これはばかげた質問のように見えるかもしれませんので、私は事前に謝罪、しかしRewriteRule年代を書くと私の非常に限られた経験で、私は.htaccessファイルは、時には複数回解析されるという感覚を得ています。

+1

Lフラグは、Apacheにその要求の書き換えルールの処理を停止するよう指示します。今や実現しないことが多いのは、書き換えられた新しいファイル名を新たに要求し、再度書き換えルールの処理を開始することです。 –

+0

私はちょうどこれがまったくばかげた質問ではないということを言いたいと思います。これは非常に混乱しやすい概念であり、Apacheのドキュメントはあまり役に立ちません。 – gview

+0

@gview、あなたは正しいです。答えを知る前に私は実際にはダムの質問だったと言っていました。私は答えを知ったので、それは簡単な質問ではないことを認識します。そして、実際には、このトピックに関してはドキュメントが非常に不足しています。 –

答えて

3

はい、Lフラグは、その例での考え方とは異なります。 .htaccessファイルは "ディレクトリごと"コンテキストにあるため、mod_rewriteはサブリクエストプロセスを作成します。そのプロセスは、処理できなくなるまで処理ルールを保持します。またはLフラグを使用している場合のように処理が中断されます。

ただし、ルール#1を使用して書き換えがトリガーされたため、書き換えエンジンは新しいサブリクエストを作成し、再度.htaccessルールを実行します。このプロセスは、書き換えが発生している限り繰り返され、書き換えがない場合にのみ処理が渡されます。

あなたの例では、Lフラグは自分のものをやっていないだけでなく、両方のルールを処理して完了する単一のサブリクエストを使用するのではなく、複数のサブリクエストを作成するようApacheに要求することによって、 。

関連する問題