指定文字数を条件にリダイレクト(Redirect Match・mod_rewrite)
外部のブログなどからリダイレクトを行う際に、
YYYYMMDD形式を含むようなURLをWordPress形式の
YYYY/MM/DD/などのディレクトリ形式に
リダイレクトさせたい場合に利用するのが指定文字数の条件判定です。
様々な書き方ができるURL転送ですが、
同じパターン表現を異なったディレクティブや判定方法で比較しています。
指定文字数とマッチングしてリダイレクト
指定文字数とマッチングしてリダイレクトを行う場合には、
リダイレクトに利用できる記述には2つが利用できます。
Redirect Match と mod_rewrite です。
それぞれの記述とパターンについてご紹介します。
今回、例示したパターンは以下の正規表現です。
これに対して、YYYYMMDD形式のURLを与え、
それぞれが正しく転送が行えることを確認しています。
- .*
- .{8}
- .{4}.{2}.{2}
- [0-9]{8}
- .{4,8}
- [0-9]{4,8}
- [0-9]{4}[0-9]{2}[0-9]{2}
Redirect Matchで指定文字数にマッチングリダイレクト
正規表現による条件分岐が手ごろに行えるのが、
Redirect Matchディレクティブの使用です。
1行のみで簡単に要求パスからの転送先URLを定義することができます。
mod_rewrite(RewriteCond) で指定文字数にマッチングリダイレクト
よく利用されているのがこのmod_rewriteのRewriteCondを利用した例です。
この場合、要求ディレクトリによる転送先振り分けのみである場合、
直下に書かれるRewriteRule条件がすべて転送となっている場合が多くあります。
本来、要求ディレクトリによる振り分けだけであれば、
後述するRewriteRule条件のみによる振り分けで十分です。
ただし、現在パスより上位のディレクトリへの要求に対しての、
条件分岐を行いたい場合にはこちらを利用する必要があります。
mod_rewrite(RewriteRule) で指定文字数にマッチングリダイレクト
要求ディレクトリによる転送先振り分けのみである場合で、
変数化を利用した動的なURL生成などを行いたい場合には、
このRewriteRule条件による記述が便利です。
個人的には、RewriteCondでパス判定を行うよりも、
RewriteRuleで記述する方が1行で済むためにお勧めです。
ただし、RewriteRuleの判定に利用できるパスは、
(.htaccessを配置した)現在パスよりも下位のディレクトリのみが判定条件に利用できます。
サブディレクトリから上位ディレクトリへのパス要求を処理することができません。
検証パターンと各リンク
各転送パターンと記述方法へ以下から直接リンクします。
パターン | Redirect Match | mod_rewrite | 備考 | |
---|---|---|---|---|
RewriteCond | RewriteRule | |||
.* | ● | ● | ● | 任意の複数文字 |
.{8} | ● | ● | ● | 任意の8文字 |
.{4}.{2}.{2} | ● | ● | ● | 任意の4+2+2文字 |
[0-9]{8} | ● | ● | ● | 0~9の8文字 |
.{4,8} | ● | ● | ● | 任意の4~8文字 |
[0-9]{4,8} | ● | ● | ● | 0~9の4~8文字 |
[0-9]{4}[0-9]{2}[0-9]{2} | ● | ● | ● | 0~9の4+2+2文字 |
さいごに
こうしたリダイレクトの記述においては、
明解に「これ!」という答えがないのが最初のうちはとっつきにくい部分です。
プログラムなどでもそうですが、
書き方は人それぞれで、結果が同じならそれでいいという世界です。
その為、1つの条件判定によるURL転送を行わせたいと思った際にも、
上記の3つから選択することができます。
もっと単純なものであれば、
Redirect,RedirectPermanentディレクティブによる記述もできます。
最初のうちは困惑する部分もあると思いますが、
一度慣れてしまえば、
比較的に簡単に正規表現が使って自在に転送が行えることと思います。
ちょっとどうやって記述するんだっけ?
そう思った時に見て頂いて、
参考にして頂けたら嬉しく思います。
Apache,Apache Hadoop,Apache Subversion,Hadoop,HDFS,HBase,Hive,Mahout,Pigは、
Apache Software Foundationの米国およびその他の国における登録商標または商標です。
ApacheソフトウェアはApache Software License (原文)および
Apache License, 2.0 (原文)に基づきOpen Source Initiativeに承認されライセンスされています。
公開日: