後方参照

.htaccess では、一部のディレクティブ(RewriteRule、RewriteCond、Macht の含まれるもの)では正規表現が利用でき、基本的な正規表現はこちらにまとめました。⇒ 正規表現の基本

正規表現で条件にマッチングした文字または文字列は、変数として格納して、それより後で利用することができます。

例を見ていきましょう。このような正規表現があったとします。

(blue|green)(\d+)(\.html)

3つにグループ化されていますね。何を意味しているかというとこうなります。

(blue|green) ⇒ “blue” または “green”
(\d+) ⇒ 1個以上の任意の数字の繰り返し
\.html ⇒ “.html”。”.” はメタ文字なので、普通の文字として “.” を扱うために、直前に “\” がつきます。

つまり、”blue1.html”、”blue2.html”、”blue10.html”、”green1.html”、”green2.html”、”green10.html” などがマッチングします。

これらを変数として格納し、 “$n” という表記で、後で利用することができます。(“n” には 0~9 の数字が入ります。)マッチング条件が複数ある場合、左側から、$1、$2、$3 という順番で、変数が格納されていきます。($0 と $1は同じ)

この例の場合はこうなります。

(blue|green) ⇒ $1
(\d+) ⇒ $2
\.html ⇒ $3

実際の.htaccessに使われる例としてはこんなかんじになります。

RedirectMatch /(blue|green)(\d+)(\.html) http://newdomein.com/$1$2$3
#               ↑"$1"に格納 ↑"$2" ↑"$3"              後方参照 ↑
# 転送元にある該当htmlファイルを、newdomein.comにある同じ名前のhtmlファイルに転送

Macht の含まれるディレクティブ、RewriteRule ディレクティブでは、前述したように、後方参照に ” $n ” が使われるのですが、RewriteCond ディレクティブでは、” %n ” が使われます。ご注意ください。