1

以下の条件とルールが与えられた場合、mod_rewrite はリクエストがファイルかディレクトリかをどのように検証しますか?

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

私の解釈では、リクエストがファイルでもディレクトリでもない場合、疑問符ではない任意の文字のパターンを持つ書き換えルールを処理し、クエリ文字列として後方参照に置き換えます$1

すべてのリクエストは、index.php、style.css、media などのファイルまたはディレクトリではありませんか? という条件ではないでしょうか

    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

リクエストがファイルまたはディレクトリの場合、書き換えルールを処理することを読み取ります

4

1 に答える 1

0

mod_rewrite のドキュメント によると、次のREQUEST_FILENAMEとおりです。

REQUEST_FILENAME が参照された時点でサーバーによってすでに決定されている場合は、要求に一致するファイルまたはスクリプトへの完全なローカル ファイルシステム パス。それ以外の場合 (仮想ホスト コンテキストで使用される場合など)、REQUEST_URI と同じ値。

これは、実際のファイル システムに存在する場合と存在しない場合があるパスのように考えることができます。着信要求は、http:\\example.com\blah.php のようになります。それが実際のファイルである場合は、それを使用したいと言っています。しかし、サーバー上に blah.php という実際のファイルが存在しない場合があります。その場合、404 エラーを返す代わりに、リクエストを index.php というファイルに渡します。

つまり、URL の一部をファイルやディレクトリと考えるべきではありません。実際のファイル システム パスにマップする必要はありません (ただし、マップすることがよくあります)。

于 2013-01-08T02:54:54.650 に答える