.htaccess RewriteRuleの注意点

[L]フラグの挙動がわかりにくかったのでメモ。

ちょっとした問題ですが、.htaccessファイルに次の記述があるとき、 index1.html にアクセスすると、最終的に開かれるファイルは何になるでしょうか。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule index1\.html /index2.html [L]
RewriteRule index2\.html /index3.html [L]
</IfModule>

{index1.htmlをindex2.htmlに変換して、[L]フラグにより変換を一度終了}

{URLが変更されたので処理が戻る}

{二週目はindex2.htmlになっているので、一つ目のルールを飛ばして二つ目に適合してindex3.htmlに変換される}

{URLが変更されたので処理が戻る}

{三週目はindex3.htmlになっているので、どちらのルールにも適合しない}

{URLに変更がなかったので処理が進む}

.htaccess に RewriteRule 書くときは、[L]フラグをつけてもそこで終了しないかもよ?って話。 - Qiita

v2.3 からは END フラグが使える。

「[END]フラグを使うと、それ以降の書き換えは抑制されるよ」

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule index1\.html /index2.html [END]
RewriteRule index2\.html /index3.html [END]
</IfModule>