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

Google or AdMax Promotion(page)

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を活用していきたいものです。

 


公開日:

*本ページ内に記載されされた各社ブランド、サービス名、商標、登録商標については、
各社ブランドのロゴや商標等に関する帰属についてをご確認ください


最後までお読みいただきありがとうございました。
アルゴリズン

役に立ったと思っていただけたら、以下からシェア頂けたら幸いです^^

QRコードからもこのURLを開けます。

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

アイキャッチ画像に利用させて頂いております、各社ブランドのロゴやシンボルに関しては、
各社ブランドのロゴや商標等に関する帰属についてをご確認頂けますようお願い致します。
ロゴの使用等に関する苦情・ご意見等がございましたら管理者までご連絡ください。

Rakuten Promotion