2010-12-19 12 views

答えて

4

ライン:

RewriteRule .* index.php [L] 

が最初に解釈され、すべての要求と一致する(ホスト名とポート番号の後にURLの一部と照合して、クエリ文字列の前に)されます。 .*は常に一致する正規表現です。より良く、より速く、ルールは次のようになります。

正規表現の手段で
RewriteRule^index.php [L] 

^、先頭を持っているすべての文字列に一致します。これはすべて.* - >と一致します。

一致が見つかった後、処理はRewriteCond(itions)で続行されます。 2つのRewriteConditionsは、不可視のロジックANDによってチェーンされています。このブロックは、両方のRewriteConditionsがtrueの場合にのみ一致します。

RewriteCond %{REQUEST_FILENAME} !-f # Check if given file is not a file AND 
RewriteCond %{REQUEST_FILENAME} !-d # Check if given directory is not a file and 

例:サーバー上に次のファイル構造がある場合。

. 
|-- css 
| `-- base.css 
|-- img 
| `-- logo.png 
`-- index.php 

あなたはURLのexample.com/ CSS/base.cssを要求した場合次の手順が発生します。 css/base.cssがファイルであるためのRewriteRuleため

  1. マッチ(すべての時間を一致させる)
  2. は、RewriteCond %{REQUEST_FILENAME} !-fと一致しません。一致が発生していないので
  3. RewriteRuleは、あなたがURLを要求した場合example.com/ EN /について次の手順が発生します

*処理が他のルールと条件をテストします、スキップされます。

  1. RewriteRuleの一致(すべての時間を一致させる)
  2. マッチRewriteCond %{REQUEST_FILENAME} !-fen/aboutが何のファイルではありませんので。
  3. en/aboutはディレクトリがないため、RewriteCond %{REQUEST_FILENAME} !-dと一致します。
  4. 正の一致を作成RewriteRuleRewriteCondの組み合わせ - >
  5. フラグL

index.phpにフラグLの要求をリダイレクトする処理を停止する最後のルールを意味します。 flagsの詳細。

このルールの組み合わせは、すべての要求をWebアプリケーションの単一のエントリポイントにリダイレクトするためによく使用されます。 index.phpで静的コンテンツの配信を避けるため、ファイルとディレクトリはindex.phpではなくWebサーバーによって提供されます。動的サイト要求のディスパッチは、index.phpのロジック内で実行されます。

*正しいデータフローが見つかりましたhere

3

それはindex.phpにディスク上のファイル((!-f))またはディレクトリ((!-d))と一致しないすべての要求を書き換えます。 [L]は、mod_rewriteの後にルールの処理を停止するように指示します。ラインの解釈によって