(mod_rewrite:RewriteCond)FC2ブログ「年月別」URL形式を再転送
FC2ブログからWordPressの年月別アーカイブページに対してURL転送を行う際に
一旦サーバーへ転送を行った後のWordPress形式URLへ置換する
mod_rewriteを利用した記述例についてご紹介します。
ここではRewriteCondにて条件判定を記述しています。
.htaccessによるURL転送方法(RewriteCond)
mod_rewriteディレクティブでRewriteCondを利用した
FC2ブログ形式の年月別アーカイブページの転送について、
ここではFC2ブログ形式のURLから移転先のドメイン名のみを変更し、
一旦移転先のサーバーへ転送を行うことを想定しています。
mod_rewrite(RewriteCond)
mod_rewriteを利用した場合には、
パターンマッチングによる動的なURL生成が利用できます。
その為、多くのURLをパターン化して、1つの記述で表現することができます。
移転元、移転先のURLマッピング
タグURL形式 | 転送元先 | 検証用転送先URL |
---|---|---|
年別アーカイブ | 転送元→ | http://date-mr2-fc2.freeblg.info/blog-date-2014.html |
→転送先 | http://url-html.rensrv.com/2014 | |
年月アーカイブ | 転送元→ | http://date-mr2-fc2.freeblg.info/blog-date-201412.html |
→転送先 | http://url-html.rensrv.com/2014/12 | |
年月日アーカイブ | 転送元→ | http://date-mr2-fc2.freeblg.info/blog-date-20141209.html |
→転送先 | http://url-html.rensrv.com/2014/12/09 |
転送先URLの末尾にスラッシュ「/」がないのは、
パーマリンク設定をカスタムとして、URLの末尾を「.html」として設定した際に、
WordPress3.9.2では末尾スラッシュなしとなってしまうためです。
それぞれの環境に合わせて必要ならスラッシュ付きで.htaccessに記載してください。
mod_rewriteを利用した場合には、
年月ごとに転送の記述をマッチングパターンで記述することができます。
パターン指定を行うことができるので、
要求されたURLから動的に転送先URLを生成させることができます。
以下では、RewriteRuleによる判定と、RewriteCondによる判定の双方を例示しています。
要求パスの判定にはスラッシュの有無に違いがありますが、
この違いについては以下でご紹介しています。
年別アーカイブ
1つの年別アーカイブページをFC2ブログからリダイレクトを行って、
WordPress形式のURLに再転送を行うには.htaccessへ記述を行います。
mod_rewriteでURL転送を記述する際には、
URLの判定条件をRewriteRule または、RewriteCondで指定することができます。
RewriteCond で指定
URLの判定条件をRewriteCondで判定させる場合には以下のように記述します。
1 2 3 4 5 |
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_URI} ^/blog-date-([0-9]{4})\.html$ RewriteRule ^ http://url-html.rensrv.com/%1 [R=302,L] </IfModule> |
この記述によって、以下のように判定されています。
RewriteCond %{REQUEST_URI} ^/blog-date-([0-9]{4})\.html$
RewriteRule ^ http://url-html.rensrv.com/%1 [R=302,L]
要求パスに対して、正規表現を用いたパターンマッチングを利用しています。
「[0-9]」は、数字の0~9のいずれかの文字であることを示しています。
「{4}」は直前に指定した0~9の文字が、4文字であることを示しています。
これによって、2014などの西暦4桁(YYYY)が入ることを表現しています。
「\」は「.html」拡張子を表現するために、特殊な意味がある「. (任意の1文字の意味)」を、
本来の文字としてのピリオドとして表現するために、エスケープしています。
これによって要求パスが「/blog-date-YYYY.html」である場合に、
このパターンにマッチします。
「([0-9]{4})」の括弧に含まれる部分の文字を、
置換後文字列で利用するために記憶しておく(変数化)ことを意味しています。
RewriteCondによる変数化した値を置換後URL文字列に含むには、
「%」を利用して置換を行います。
この記憶した値を「%1」として、利用しています。
「blog-date-2014.html」と要求された場合、/2014 として置換後パスに挿入されます。
以下のURLにアクセスするとURLが転送されるのが確認できます。
年月別アーカイブ
1つの年月別アーカイブページをFC2ブログからリダイレクトを行って、
WordPress形式のURLに再転送を行うには.htaccessへ記述を行います。
mod_rewriteでURL転送を記述する際には、
URLの判定条件をRewriteRule または、RewriteCondで指定することができます。
RewriteCond で指定する場合
URLの判定条件をRewriteCondで判定させる場合には以下のように記述します。
1 2 3 4 5 |
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_URI} ^/blog-date-([0-9]{4})([0-9]{2})\.html$ RewriteRule ^ http://url-html.rensrv.com/%1/%2 [R=302,L] </IfModule> |
この記述によって、以下のように判定されています。
RewriteCond %{REQUEST_URI} ^/blog-date-([0-9]{4})([0-9]{2})\.html$
RewriteRule ^ http://url-html.rensrv.com/%1/%2 [R=302,L]
要求パスに対して、正規表現を用いたパターンマッチングを利用しています。
「[0-9]」は、数字の0~9のいずれかの文字であることを示しています。
「{4}」は直前に指定した0~9の文字が、4文字であることを示しています。
これによって、2014などの西暦4桁(YYYY)が入ることを表現しています。
「{2}」は直前に指定した0~9の文字が、2文字であることを示しています。
これによって、12などの月2桁(MM)が入ることを表現しています。
「\」は「.html」拡張子を表現するために、特殊な意味がある「. (任意の1文字の意味)」を、
本来の文字としてのピリオドとして表現するために、エスケープしています。
これによって要求パスが「/blog-date-YYYY.html」である場合に、
このパターンにマッチします。
「([0-9]{4})」「([0-9]{2})」の括弧に含まれる部分の文字を、
置換後文字列で利用するために記憶しておく(変数化)ことを意味しています。
RewriteCondによる変数化した値を置換後URL文字列に含むには、
「%」を利用して置換を行います。
この記憶した値を「%1」として、利用しています。
番号は左から順番に付与されます。
「blog-date-201412.html」と要求された場合、/2014/12 として置換後パスに挿入されます。
以下のURLにアクセスするとURLが転送されるのが確認できます。
すぐにWordPressによって転送され以下のURLにページが遷移します。
年月日別アーカイブ
1つの年月別アーカイブページをFC2ブログからリダイレクトを行って、
WordPress形式のURLに再転送を行うには.htaccessへ記述を行います。
mod_rewriteでURL転送を記述する際には、
URLの判定条件をRewriteRule または、RewriteCondで指定することができます。
RewriteCond で指定する場合
URLの判定条件をRewriteCondで判定させる場合には以下のように記述します。
1 2 3 4 5 |
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_URI} ^/blog-date-([0-9]{4})([0-9]{2})([0-9]{2})\.html$ RewriteRule ^ http://url-html.rensrv.com/%1/%2/%3 [R=302,L] </IfModule> |
この記述によって、以下のように判定されています。
RewriteCond %{REQUEST_URI} ^/blog-date-([0-9]{4})([0-9]{2})([0-9]{2})\.html$
RewriteRule ^ http://url-html.rensrv.com/%1/%2/%3 [R=302,L]
要求パスに対して、正規表現を用いたパターンマッチングを利用しています。
「[0-9]」は、数字の0~9のいずれかの文字であることを示しています。
「{4}」は直前に指定した0~9の文字が、4文字であることを示しています。
これによって、2014などの西暦4桁(YYYY)が入ることを表現しています。
「{2}」は直前に指定した0~9の文字が、2文字であることを示しています。
これによって、12などの月2桁(MM)、日2桁(DD)が入ることを表現しています。
「\」は「.html」拡張子を表現するために、特殊な意味がある「. (任意の1文字の意味)」を、
本来の文字としてのピリオドとして表現するために、エスケープしています。
これによって要求パスが「/blog-date-YYYYMMDD.html」である場合に、
このパターンにマッチします。
「([0-9]{4})」「([0-9]{2})」「([0-9]{2})」の括弧に含まれる部分の文字を、
置換後文字列で利用するために記憶しておく(変数化)ことを意味しています。
この記憶した値を「%1」「%2」「%3」として、利用しています。
番号は左から順番に付与されます。
「/blog-date-20141209.html」と要求された場合、/2014/12/09 として置換後パスに挿入されます。
以下のURLにアクセスするとURLが転送されるのが確認できます。
すぐにWordPressによって転送され以下のURLにページが遷移します。
実際にサーバーに導入する場合
実際にサイトに対して設定を行う場合には、
それぞれの行を順に記述してサーバーに導入します。
転送されることを確認し問題がないことがわかったら、
レスポンスコードを302から301へと変更します。
RewriteCond で指定する場合
1 2 3 4 5 6 7 8 9 |
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_URI} ^/blog-date-([0-9]{4})\.html$ RewriteRule ^ http://url-html.rensrv.com/$1 [R=301,L] RewriteCond %{REQUEST_URI} ^/blog-date-([0-9]{4})([0-9]{2})\.html$ RewriteRule ^ http://url-html.rensrv.com/$1/$2 [R=301,L] RewriteCond %{REQUEST_URI} ^/blog-date-([0-9]{4})([0-9]{2})([0-9]{2})\.html$ RewriteRule ^ http://url-html.rensrv.com/$1/$2/$3 [R=301,L] </IfModule> |
%1と$1の併用について
mod_rewriteを利用した場合、正規化表現によってマッチングしたURL文字列を、
()括弧で囲むことで、記憶し置換後URLで変数として利用することができます。
この%と$は非常に便利に利用することができます。
当然、併用することも可能です。
さいごに
年月アーカイブ形式のURLは、
FC2ブログから移転先サーバにURL転送を行う際に、
JavaScriptを利用した転送を行うしかないタイプのページです。
年月別アーカイブのインデックスがさほど重要だとは思っていませんが、
念のためURL転送を行っておく程度の力感でいいのではないかと思います。
WordPressはWordPress Foundation の登録商標(第5049965号)です。
WordPressロゴ、アイコンその他のマーク等はWordPress Foundation の商標であり、
WordPress Foundation の著作物です。
WordPress.comはWordPress Foundation が管理運営を行うドメインならびにサービスの名称です。
WordPress.com、WordPress.net、WordPress.org、WordPress.tv、
WordPressFoundation.orgはWordPress Foundationが
管理運営を行なう正式なトップレベルドメインであるとともに、
WordPress Foundationが運営を行うサービスの名称です。
wordpressはFree Software Foundation, Inc.によってGPL2+でライセンスされています。
FC2はFC2, Inc.の商標であり、FC2ブログはFC2, Inc.のサービス名称です。
FC2ロゴ、アイコンその他のマーク等はFC2, Inc.の商標であり、FC2, Inc.の著作物です。
公開日: