2

以下のように、単純な .htaccess ファイルをセットアップして、リクエストをサンプルの index.php ファイルに送信します。

RewriteEngine On

RewriteRule ^foo/(.*)$ bar/$1   # [L] here changes output

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?request=$1

devserver.com/foo/bazの結果に$_GET['request']アクセスしますbar/baz/baz[L]最初にフラグを追加するとRewriteRule、期待される結果が得られbar/bazます。

[L] フラグを誤解している人々の多くの質問/回答を読みました。これにより、すべての書き換えが終了すると考えられています。私はそうではないことを知っており、[L] フラグがここで実際にどのように違いを生むべきかはまったくわかりません。

ここで私が想定している手順は次のとおりです。最初は [L] を使用しません。

  1. リクエスト URL は次のように始まりますfoo/baz
  2. リクエストは最初のルールに一致し、次のように書き換えられますbar/baz
  3. リクエストは処理を続行し、RewriteCond
  4. リクエストは次のルールにも一致し、次のように書き換えられますindex.php?request=bar/baz
  5. 新しいイテレーションは次のリクエストで始まりますindex.php?request=bar/baz
  6. 新しいリクエストはルールに一致せず、最終的な出力です

[L] の場合:

  1. リクエスト URL は次のように始まりますfoo/baz
  2. リクエストは最初のルールに一致し、次のように書き換えられますbar/baz
  3. 新しいイテレーションは次のリクエストで始まりますbar/baz
  4. 要求は、RewriteCond
  5. リクエストは次のルールに一致し、次のルールに書き換えられますindex.php?request=bar/baz
  6. 新しいイテレーションは次のリクエストで始まりますindex.php?request=bar/baz
  7. 新しいリクエストはルールに一致せず、最終的な出力です

この単純化されたシナリオでは、どのようbazに複製されるかを理解できません。私は何を誤解していますか?

編集: これを最初の RewriteRule の下に追加すると、最後$_GET['request']test/baz. これが何を意味するかわからない:

RewriteCond %{REQUEST_URI} ^/foo/baz$
RewriteRule ^bar/baz/baz$ /test
4

1 に答える 1