1

私はMod_Rewriteのこれらの2行が何をするのかを理解しようとしているので、助けていただければ幸いです。前もって感謝します。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ $1.php
4

1 に答える 1

4

要求されたURIが既存のファイルであるかディレクトリであるかをチェックします。フロントは!条件を「not」にするため、リクエストはファイルまたはディレクトリにマップされません。

mod_rewriteの説明を参照してください-f-d


すべてのリクエストがブラウザでロードできるように、あるファイルにマップされていませんか?

いいえ。リクエストは、存在せずに書き換えられるものである可能性があります。たとえば、http://en.wikipedia.org/wiki/somethingは、URIが/wiki/somethingであることを意味します。これは、物理ファイルまたはディレクトリにマップされません。しかし、内部的には、に書き換えるルールがあり、実際に/wiki/something存在ます。index.php?title=somethingindex.php


編集:編集された質問の場合

  • 2つの条件:要求されたURIがファイルまたはディレクトリにマップされない場合は、次のルールを適用します。
  • ルール:リクエストが何であれ、.php最後にaを追加します。
  • この背後にあるロジック:mod_rewriteは、リライトエンジンに入るURIとそこから出てくるURIが同一になるまでループします。URIが物理ファイルまたはディレクトリにマップされているかどうかを確認するチェックがないと、ルールはループします。
    • =/somethingのURI
    • 条件を確認してください:/somethingが存在しません
    • ルールを適用し、URIを=/something.phpに
    • 条件を確認してください:/something.php存在し、ルールを適用しないでください
    • URI入力=URI出力=/something.php、書き換えを停止します
  • それ以外の場合は、!-f!-dチェックなしで:
    • =/somethingのURI
    • ルールを適用、URI = /something.php
    • =/something.phpのURI
    • ルールを適用、URI = /something.php.php
    • =/something.php.phpのURI
    • ルールを適用、URI = /something.php.php.php
    • apacheが停止して500エラーを返すことを決定するまで、無期限にループします
于 2012-06-30T15:31:06.237 に答える