スポンサードリンク

【mod_rewrite】RewriteRuleで用いる「Cフラグ」について

mod_rewriteのディレクティブの一つRewriteRuleで用いる「Cフラグ」についてまとめています。

スポンサードリンク

Cフラグについて

ルール条件を指定するRewriteCondは、直後のRewriteRuleにしか適用されません。

しかしCフラグを用いることで、次のRewriteRuleにもRewriteCondの条件を適用できるようになります。

詳細

ルートディレクトリに以下を記述した「.htaccess」を設置するとします。

RewriteEngine on
RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?ysklog.net
RewriteRule ^index\.html$ index2.html   ・・・①
RewriteRule ^index2\.html$ index3.html   ・・・②

この場合、参照元が「ysklog.net」であるアクセスのみ①のRewriteRuleが処理されます。②はRewriteCondとは無関係です。

しかし、

RewriteEngine on
RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?ysklog.net
RewriteRule ^index\.html$ index2.html [C]  ・・・①
RewriteRule ^index2\.html$ index3.html     ・・・②

のようにCフラグを用いると、RewriteCondは①と②に適用されます。

すなわち、②はRewriteCondのルール条件を満たさない限り処理されません。

つまり記述的には以下と同じようになります。

RewriteEngine on
RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?ysklog.net
RewriteRule ^index\.html$ index2.html
RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?ysklog.net
RewriteRule ^index2\.html$ index3.html

このようにCフラグは、RewriteCondの条件を鎖(Chain:チェイン)のように繋ぐ働きがあります。

また、Cフラグの使用個数に制限はないので、後続のRewriteRuleをいくつもチェインすることができます。

なお、一つ目のRewriteRuleでパターンマッチすれば次のRewriteRuleに処理が移りますが、一つ目でパターンマッチしなければそれ以降のRewriteRule(チェインされたもの)は処理されません。

コメント

まだコメントはありません。

コメントフォーム
お名前
コメント