mod_rewriteで条件分岐
URLがある条件にマッチした場合にはURLを書き換えたくない場合がある。
そういうときは [S] (Skip) フラグを使用する。
このフラグを使うとURLが条件にマッチした場合にはn行下までの条件をスキップすることができ、擬似的にIF文のような条件分岐を実現できる。このとき、RewriteRuleは以下の様な構文になる。
RewriteRule <condition> - [S=n] #URLが<condition>にマッチした場合はn行下までの条件をスキップする
Apache公式ドキュメントに書かれていた例が分かりやすかった。
# Does the file exist? RewriteCond "%{REQUEST_FILENAME}" "!-f" RewriteCond "%{REQUEST_FILENAME}" "!-d" # Create an if-then-else construct by skipping 3 lines if we meant to go to the "else" stanza. RewriteRule ".?" "-" [S=3] # IF the file exists, then: RewriteRule "(.*\.gif)" "images.php?$1" RewriteRule "(.*\.html)" "docs.php?$1" # Skip past the "else" stanza. RewriteRule ".?" "-" [S=1] # ELSE... RewriteRule "(.*)" "404.php?file=$1" # ENDhttps://httpd.apache.org/docs/2.4/rewrite/flags.html#flag_s