0

次の書き換えルールがあります:

RewriteEngine ON

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z]+)/(js|css|img)/(.+\.jpg|gif|png|js|css)$ media/myfiles/$1/$2/$3 [L]
RewriteRule .* index.php

私のアプリケーションにはルートクラスがあり、必要に応じてURLを処理できます。

書き換えルールに一致する拡張子を含むファイルを開こうとすると、次の書き換えルールに移動し、ルータークラスがこのURLを処理します...

ルールが最初に一致した後、apacheが停止しない理由はありますか?

PSの最初のルールは、2番目のルールを無効にした後に機能します。

4

1 に答える 1

1

ここを見てください:http://httpd.apache.org/docs/2.2/rewrite/flags.html

.htaccessファイルまたはセクションでRewriteRuleを使用している場合は、ルールがどのように処理されるかをある程度理解しておくことが重要です。これの単純化された形式は、ルールが処理されると、書き換えられた要求がURL解析エンジンに戻され、それを使用して実行できるようにすることです。書き換えられた要求が処理されるときに、.htaccessファイルまたはセクションが再度検出される可能性があります。そのため、ルールセットが最初から再実行される可能性があります。最も一般的には、これは、ルールの1つがリダイレクト(内部または外部)を引き起こし、要求プロセスを最初からやり直す場合に発生します。

(私の強調)

だから私が思うのは、あなたの最後のルールがヒットし、リダイレクトするということです。収益とは呼ばれません。しかし、その後、リクエストは他のリクエストと同じように処理され、正規表現はヒットしません。この実行では、収益が機能します。

これは、一番下のルールを無効にしたときにも機能する理由でもあります。2回目は何もすることがないため、何も起こりません。

于 2012-06-18T14:11:53.130 に答える