次のmod_rewriteコードは何をしていますか?誰かが詳細にコードを説明できますか?次のmod_rewriteコードは何をしますか?
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L]
次のmod_rewriteコードは何をしていますか?誰かが詳細にコードを説明できますか?次のmod_rewriteコードは何をしますか?
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L]
ライン:
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ため
RewriteCond %{REQUEST_FILENAME} !-f
と一致しません。一致が発生していないのでRewriteRule
は、あなたがURLを要求した場合example.com/ EN /について次の手順が発生します*処理が他のルールと条件をテストします、スキップされます。
RewriteRule
の一致(すべての時間を一致させる)RewriteCond %{REQUEST_FILENAME} !-f
、en/about
が何のファイルではありませんので。en/about
はディレクトリがないため、RewriteCond %{REQUEST_FILENAME} !-d
と一致します。RewriteRule
とRewriteCond
の組み合わせ - >L
とindex.php
にフラグL
の要求をリダイレクトする処理を停止する最後のルールを意味します。 flagsの詳細。
このルールの組み合わせは、すべての要求をWebアプリケーションの単一のエントリポイントにリダイレクトするためによく使用されます。 index.php
で静的コンテンツの配信を避けるため、ファイルとディレクトリはindex.phpではなくWebサーバーによって提供されます。動的サイト要求のディスパッチは、index.php
のロジック内で実行されます。
*正しいデータフローが見つかりましたhere
それはindex.phpにディスク上のファイル((!-f)
)またはディレクトリ((!-d)
)と一致しないすべての要求を書き換えます。 [L]
は、mod_rewriteの後にルールの処理を停止するように指示します。ラインの解釈によって