リダイレクトに対する挙動と検証
mod_rewriteはサイトなどで紹介されているままに記述しても、
なかなか思うように転送されなかったりして、悩むことの多いものです。
そんな mod_rewriteを利用したURL転送で、
ここの条件指定部分のみを対象に書き方の違いでどのような挙動が得られるのかを検証しています。
mod_rewrite x RewriteRule条件の再検証
mod_rewriteに指定するRewriteRule条件部分に対しての、
条件指定の微妙な違いと挙動について、
指定例と実際の挙動についてご紹介しています。
以下のような検証を行っています。
- mod_rewrite x RewriteRule条件の指定比較(ルート)
- mod_rewrite x RewriteRule条件の指定比較(サブディレクトリ)
- mod_rewrite x RewriteRule条件の「.(ドット)」扱いの再検証
- RewriteRuleによるディレクトリ判定例(ルートディレクトリ)
- RewriteRuleによるディレクトリ判定例(サブディレクトリ)
- RewriteRuleで$0変数の利用(ルート・サブディレクトリ)
- RewriteRuleで%{REQUEST_URI}の使用(ルート・サブディレクトリ差異)
- mod_rewriteでクエリ文字列(/?q=)を引き継がずにURL置換
クエリストリング(/?q=)付きURLの転送検証
外部のサイトやブログなどからURL転送を行う際には、
元のURLが「…/?q=」や「…/?s=」や「…/?tag=」などの形式の場合もあります。
一般的にはこうしたURLの転送にはmod_rewriteが利用されます。
実際のところRedirectやRedirect Matchを指定してURL転送を行うと、
どのような挙動が得られるのかを本投稿にて検証を行っておきます。
以下のような検証を行っています。
- Redirect x クエリ文字列(/?q=)URL転送
- RedirectPermanent x クエリ文字列(/?q=)URL転送
- Redirect Match x クエリ文字列(/?q=)URL転送
- mod_rewrite x クエリ文字列(/?q=)URL転送
日本語URLを含むリダイレクト手順
Web上では転送元URLに日本語URLが使用されている場合には、
URLエンコード文字列でマルチバイト文字を記述するようにとの記載を見かけますが、
当環境においては、日本語文字列をそのまま記載した状態で、
問題なく転送を行うことができています。
ここでは各ディレクティブごとの記述と動作についてご紹介します。
以下のような検証を行っています。
- Redirect日本語URLリダイレクト
- RedirectParmanent日本語URLリダイレクト
- Redirect Match日本語URLリダイレクト
- mod_rewrite日本語URLリダイレクト
指定文字数を条件にリダイレクト(Redirect Match・mod_rewrite)
外部のブログなどからリダイレクトを行う際に、
YYYYMMDD形式を含むようなURLをWordPress形式の
YYYY/MM/DD/などのディレクトリ形式に
リダイレクトさせたい場合に利用するのが指定文字数の条件判定です。
様々な書き方ができるURL転送ですが、
同じパターン表現を異なったディレクティブや判定方法で比較しています。
以下のような検証を行っています。
- Redirect Matchで指定文字数にマッチングリダイレクト
- mod_rewrite(RewriteCond) で指定文字数にマッチングリダイレクト
- mod_rewrite(RewriteRule)で指定文字数にマッチングリダイレクト
mod_rewriteで変数(%1,$1)を併用する例と実際の動作
mod_rewriteを利用したURL転送では、
RewriteRule、RewriteCondの双方で条件判定を行うことができます。
また条件判定に利用した要求URLの一部を記憶させて、
置換後文字列に対して変数として再利用させることが可能です。
これによってパターンにマッチした文字列から動的にURL生成が行えます。
RewriteRule、RewriteCondで変数化した値を置換後文字列に利用するには、
「%1」「$1」などの記号を用いますが、当然この記号を併用することもできます。
ここでは、それぞれを併用した場合の例をご紹介します。
さいごに
.htaccessは難しいことはないのですが、
いざやりたいことを記述すると上手くいかなかったりと、
余計な時間を取ってしまうことも多くあるものです。
そんな時には、基本的なパターンを試してから、
難しいマッチングに変更していくといいでしょう。
意外とマッチングパターンの文字数が違っているだけだったりすることもあります。
私も、YYYYMMDDの文字数を6文字だとばかり勘違いしていたりと、
口に出せないようなお粗末なミスをしていることもありました。
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に承認されライセンスされています。
公開日:
最終更新日:2015/01/09