web-dev-qa-db-ja.com

mod_rewrite:このRewriteRuleは何をしますか?

これらの条件を考えると(私はそれらが何を意味するか/するかを知っています):

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d 

firstルールは何をしますか?その孤独なダッシュは何のためですか?

RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ /index.php [NC,L]

私はこれをZendFrameworkと組み合わせてかなり長い間使用してきましたが、最初のルールが正確に何をするのかを実際に理解することはできませんでした。

28
Decent Dabbler

RewriteCondディレクティブ は、 RewriteRuleディレクティブ の追加条件を説明するだけです。したがって、RewriteCondは常にRewriteRuleに関連付けられている必要があります。

あなたの場合、3つのRewriteCondはおそらく最初のRewriteRuleに次のように属します。

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]

RewriteRuleのパターンが現在のリクエストURL(以前に削除されたディレクトリパスごと)およびと一致する場合、このルールが適用されます。条件が満たされています。

この場合、この条件は、リクエストURLをファイルシステムにマッピングするときに、ファイルサイズが0より大きい既存のファイル(-s)、またはシンボリックリンク(-l)またはディレクトリ(-d)。したがって、ルールはすべてのURLに適用されます(^.*$は、ファイルシステムに存在するものにマップできるものすべてに一致します。置換-は何も変更しないことを意味します。そして、[〜#〜] nc [〜#〜]大文字と小文字は区別されません、大文字と小文字を区別せず、このコンテキストでは役に立たない)および[〜#〜] l [〜#〜](適用される場合は最後のルール)は- flags パターン、置換、またはルールの実行のいずれかを変更します。

51
Gumbo