頑張らない!でも諦めない!必死にならずにええかげん

mod_rewriteで変数(%1,$1)を併用する例と実際の動作

mod_rewriteを利用したURL転送では、
RewriteRule、RewriteCondの双方で条件判定を行うことができます。
また条件判定に利用した要求URLの一部を記憶させて、
置換後文字列に対して変数として再利用させることが可能です。
これによってパターンにマッチした文字列から動的にURL生成が行えます。
RewriteRule、RewriteCondで変数化した値を置換後文字列に利用するには、
「%1」「$1」などの記号を用いますが、当然この記号を併用することもできます。
ここでは、それぞれを併用した場合の例をご紹介します。

 

mod_rewriteで変数(%1,$1)を併用する例と実際の動作

 

置換後URLにて要求URLの一部文字列を流用する場合、

RewriteRuleにて要求URLの判定を行った場合は「$1」利用します。
RewriteCondにて要求URLの判定を行った場合は「%1」利用します。

mod_rewriteでURL転送を行う例は、
以下の投稿でそれぞれご紹介しました。

 

そうしたURL文字列を利用したURL置換は当然ですが併用することができます。

例として以下のように.htaccessに対して記載しています。

 

上記の記述は以下のような意味になっています。

RewriteCond %{REQUEST_URI} ^/blog-date-([0-9]{4})[0-9]{2}[0-9]{2}\.html$
RewriteRule ^blog-date-[0-9]{4}([0-9]{2})([0-9]{2})\.html$ http://url-html.rensrv.com/%1/$1/$2 [R=302,L]

 

ここでは「/blog-date-YYYYMMDD.html」への要求があった場合に、
http://url-html.rensrv.com/YYYY/MM/DD へURL転送を行う例でご紹介します。

 

RewriteCond行の「%{REQUEST_URI}」部分は、
要求のあったURL文字列と判定を行うことを示しています。
ここでは「/blog-date-YYYYMMDD.html」への要求パスが得られます。

その要求パスと以下のパターンを比較しています。
「^/blog-date-([0-9]{4})[0-9]{2}[0-9]{2}\.html$」

またRewriteRule行では「RewriteRule 」に続いてマッチングパターンを
記述することでマッチングを行います。

以下のパターンでURL判定を行っています。
「^blog-date-[0-9]{4}([0-9]{2})([0-9]{2})\.html$ 」

それぞれの違いは括弧「()」「()」「()」の有無の違いだけです。

 

要求パスの頭に「/」の有無による違いがありますが、
この点については以前、以下でご紹介しています。

 

さて、要求パスの条件判定は全く同じものを設定し、
括弧「()」「()」「()」の位置によって、ここでは置換ルールを設定しています。

「http://url-html.rensrv.com/%1/$1/$2

これによって、以下のように転送ルールが適用されます。

  • () 内の文字は %1 に挿入されます。
  • () 内の文字は $1 に挿入されます。
  • () 内の文字は $2 に挿入されます。

 

こうした条件判定時に得た文字列を置換後文字列側に挿入し、
置換後URLを組み立てることができます。

 

実際の動作例は以下にアクセスすることで確認が行えます。

 

アクセスするとすぐに以下URLへ転送されます。

http://url-html.rensrv.com/2014/12/09

 

プロモーション(btm)

Google or AdMax Promotion (it)

さいごに

実際、このような転送の記述は行わず、
どちらかのURL判定をおこなって「%」または「$」による変数指定を行うでしょう。

RewriteCondでは、要求されたURLを取得するサーバー変数
「%{REQUEST_URI}」だけでなく様々な変数が利用できます。

 

要求パスだけであれば、RewriteCond、RewriteRuleどちらでも記述できますが、
URLのクエリ文字列による判定とクエリ文字列の取得には、
RewriteCondによる記述が必要になります。

 

この場合は当然「%」によるクエリ文字列の変数化を利用します。

併せて要求パスの変数化を利用するような場合には、
「$」も併用することもあるでしょう。

 

こうした記述方法と挙動を理解したうえでmod_rewriteを活用していきたいものです。

 


公開日:

最後までお読みいただきありがとうございました。

ページ
すべて展開 | すべて省略

Rakuten Promotion

ブログ記事のご紹介
すべて展開 | すべて省略