以下のように、単純な .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] を使用しません。
- リクエスト URL は次のように始まります
foo/baz
- リクエストは最初のルールに一致し、次のように書き換えられます
bar/baz
- リクエストは処理を続行し、
RewriteCond
- リクエストは次のルールにも一致し、次のように書き換えられます
index.php?request=bar/baz
- 新しいイテレーションは次のリクエストで始まります
index.php?request=bar/baz
- 新しいリクエストはルールに一致せず、最終的な出力です
[L] の場合:
- リクエスト URL は次のように始まります
foo/baz
- リクエストは最初のルールに一致し、次のように書き換えられます
bar/baz
- 新しいイテレーションは次のリクエストで始まります
bar/baz
- 要求は、
RewriteCond
- リクエストは次のルールに一致し、次のルールに書き換えられます
index.php?request=bar/baz
- 新しいイテレーションは次のリクエストで始まります
index.php?request=bar/baz
- 新しいリクエストはルールに一致せず、最終的な出力です
この単純化されたシナリオでは、どのようbaz
に複製されるかを理解できません。私は何を誤解していますか?
編集: これを最初の RewriteRule の下に追加すると、最後$_GET['request']
のtest/baz
. これが何を意味するかわからない:
RewriteCond %{REQUEST_URI} ^/foo/baz$
RewriteRule ^bar/baz/baz$ /test