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

mod_rewrite(RewriteRule)で指定文字数にマッチングリダイレクト

外部のブログなどからリダイレクトを行う際に、
YYYYMMDD形式を含むようなURLをWordPress形式の
YYYY/MM/DD/などのディレクトリ形式に
リダイレクトさせたい場合に利用するのが指定文字数の条件判定です。
ここでは条件判定に利用できるmod_rewrite(RewriteRule)パターン例の検証を行います。

 

mod_rewrite(RewriteRule)による条件判定

パターンマッチする条件は以下の例でご紹介します。

 

パターン 要求URL 転送先URL
.* /n-modrewrite/mrrr/dot-asta/blog-date-20141127.html http://redirect.trce.info/num/static/
.{8} /n-modrewrite/mrrr/dot-8/blog-date-20141127.html http://redirect.trce.info/num/dot-8/
.{4}.{2}.{2} /n-modrewrite/mrrr/dot-422/blog-date-20141127.html http://redirect.trce.info/num/dot-422/
[0-9]{8} /n-modrewrite/mrrr/0to9-8/blog-date-20141127.html http://redirect.trce.info/num/0to9-4to8/
.{4,8} /n-modrewrite/mrrr/dot-4to8/blog-date-20141127.html http://redirect.trce.info/num/dot-4to8/
[0-9]{4,8} /n-modrewrite/mrrr/0to9-4to8/blog-date-20141127.html http://redirect.trce.info/num/0to9-4to8/
[0-9]{4}[0-9]{2}[0-9]{2} /n-modrewrite/mrrr/0to9-422/blog-date-20141127.html http://redirect.trce.info/num/0to9-4to8/

 

 

検証と.htaccess設定

以下の検証では、転送先URLは便宜上固定としています。

検証の最後には動的に変数化してURLを生成する例をご紹介しています。

 

URL固定によるマッチング

一覧へ戻る

.htaccessには以下のように記述しています。

これは特に正規表現を利用せず、1対1対応でURL転送を行う例です。

この指定によって以下のように解釈されます。

説明

RewriteRule ^blog-date-20141127\.html http://redirect.trce.info/num/static/2014/11/27/ [R=302,L]  

http://n-modrewrite.trce.info/mrrr/static/blog-date-20141127.html

この場合、日付に当たる「20141127」部分が「20141127」と

一致した場合のみに転送が行われる指定を行っています。   

 

転送と動作確認

URLにアクセスすると、転送先に正しく転送されるのが確認できます。    

 

「.*」によるマッチング

一覧へ戻る

.htaccessには以下のように記述しています。

これは特に正規表現を利用せず、1対1対応でURL転送を行う例です。

この指定によって以下のように解釈されます。

 

説明

RewriteRule ^blog-date-.*\.html http://redirect.trce.info/num/dot-asta/2014/11/27/ [R=302,L]

 

この「.*」による条件指定は「任意の1文字+0回以上の繰り返し」を示しています。

よって、日付部分が条件に該当しています。

http://n-modrewrite.trce.info/mrrr/dot-asta/blog-date-20141127.html

尚「0回以上の任意の1文字」は空文字でも含まれますので、以下も対象になります。

http://n-modrewrite.trce.info/mrrr/dot-asta/blog-date-.html

http://n-modrewrite.trce.info/mrrr/dot-asta/blog-date-abcdefghijklmnopqrstuvwxyz.html

 

転送と動作確認

URLにアクセスすると、転送先に正しく転送されるのが確認できます。

 

その他の記述例

●Redirect Match ●RewriteCond

 

 

「.{8}によるマッチング

一覧へ戻る

.htaccessには以下のように記述しています。

これは特に正規表現を利用せず、1対1対応でURL転送を行う例です。

この指定によって以下のように解釈されます。

説明

RewriteRule ^blog-date-.{8}\.html http://redirect.trce.info/num/dot-8/2014/11/27/ [R=302,L]    

 

この「.{8}」は「*」とは異なって、一致する回数分の繰り返しを示しています。

その為「任意の1文字+8回繰り返し」を示しています。

要は8文字(8byte)が挿入された場合のみが該当します。YYYYMMDD=8文字(8byte)

http://n-modrewrite.trce.info/dot-8/blog-date-20141127.html  

尚、任意の8文字ですので以下のようなパターンでもマッチします。

http://n-modrewrite.trce.info/mrrr/dot-8/blog-date-12345678.html

http://n-modrewrite.trce.info/mrrr/dot-8/blog-date-redirect.html        

 

転送と動作確認

URLにアクセスすると、転送先に正しく転送されるのが確認できます。  

 

その他の記述例

●Redirect Match ●RewriteCond

 

 

「.{4}.{2}.{2}によるマッチング

一覧へ戻る

.htaccessには以下のように記述しています。

これは特に正規表現を利用せず、1対1対応でURL転送を行う例です。

この指定によって以下のように解釈されます。

 

説明

RewriteRule ^blog-date-.{4}.{2}.{2}\.html http://redirect.trce.info/num/dot-422/2014/11/27/ [R=302,L]

 

この「.{4}.{2}.{2}」は「.{8}」を細かな文字数のフォーマットにしているだけです。
判定条件は同じになりますが、このような記述方法を利用することで、
以下のように変数化する場合に利用できます。

RedirectMatch 302 /blog-date-(.{4})(.{2})(.{2})\.html http://redirect.trce.info/num/dot-422/$1/$2/$3/

この場合も「任意の1文字+8回繰り返し」を示しています。

http://n-modrewrite.trce.info/mrrr/dot-422/blog-date-20141127.html

 

転送と動作確認

URLにアクセスすると、転送先に正しく転送されるのが確認できます。

 

 

その他の記述例

●Redirect Match ●RewriteCond

 

 

「[0-9]{8}によるマッチング

一覧へ戻る

.htaccessには以下のように記述しています。

これは特に正規表現を利用せず、1対1対応でURL転送を行う例です。

この指定によって以下のように解釈されます。

 

説明

RewriteRule ^blog-date-[0-9]{8}\.html http://redirect.trce.info/num/0to9-8/2014/11/27/ [R=302,L]     

 

この「[0-9]{8}」は「.{8}」の条件判定で「任意の1文字」を「0から9の数字」に限定します。

かつ、文字数を8文字(8byte)としています。

http://n-modrewrite.trce.info/mrrr/0to9-8/blog-date-20141127.html    

以下のような場合も同じように転送されます。

http://n-modrewrite.trce.info/mrrr/0to9-8/blog-date-12345678.html

 

しかし、数字ではないこの場合は転送されません。

http://n-modrewrite.trce.info/mrrr/0to9-8/blog-date-redirect.html (転送不可404表示)

 

転送と動作確認

URLにアクセスすると、転送先に正しく転送されるのが確認できます。  

 

その他の記述例

●Redirect Match ●RewriteCond

 

 

「.{4,8}によるマッチング

一覧へ戻る

.htaccessには以下のように記述しています。

これは特に正規表現を利用せず、1対1対応でURL転送を行う例です。

この指定によって以下のように解釈されます。

 

説明

RewriteRule ^blog-date-.{4,8}\.html http://redirect.trce.info/num/dot-4to8/2014/11/27/ [R=302,L]

 

この「.{4,8}」は「任意の1文字」を「4~8文字(4-8byte)」に限定しています。

http://n-modrewrite.trce.info/mrrr/dot-4to8/blog-date-20141127.html

 

この場合は以下のようなパターンでも転送されます。

http://n-modrewrite.trce.info/mrrr/dot-4to8/blog-date-201411.html

http://n-modrewrite.trce.info/mrrr/dot-4to8/blog-date-2014.html

http://n-modrewrite.trce.info/mrrr/dot-4to8/blog-date-year.html

http://n-modrewrite.trce.info/mrrr/dot-4to8/blog-date-newyear.html

 

転送と動作確認

URLにアクセスすると、転送先に正しく転送されるのが確認できます。

 

その他の記述例

●Redirect Match ●RewriteCond

 

 

「[0-9]{4,8}によるマッチング

一覧へ戻る

.htaccessには以下のように記述しています。

これは特に正規表現を利用せず、1対1対応でURL転送を行う例です。

この指定によって以下のように解釈されます。

 

説明

RewriteRule ^blog-date-[0-9]{4,8}\.html http://redirect.trce.info/num/0to9-4to8/2014/11/27/ [R=302,L]    

 

この「[0-9]{4,8}」は「任意の1文字」を「4~8文字(4-8byte)」に限定し、

かつ「0~9の数字」のみに限定しています。

http://n-modrewrite.trce.info/mrrr/0to9-4to8/blog-date-20141127.html    

この場合も以下のようなパターンでも転送されます。

http://n-modrewrite.trce.info/mrrr/0to9-4to8/blog-date-201411.html

http://n-modrewrite.trce.info/mrrr/0to9-4to8/blog-date-2014.html    

 

しかし数字以外では転送されません。

http://n-modrewrite.trce.info/mrrr/0to9-4to8/blog-date-year.html (転送不可404)

http://n-modrewrite.trce.info/mrrr/0to9-4to8/blog-date-newyear.html (転送不可404)

 

転送と動作確認

URLにアクセスすると、転送先に正しく転送されるのが確認できます。  

 

その他の記述例

●Redirect Match ●RewriteCond

 

 

「[0-9]{4}[0-9]{2}[0-9]{2}によるマッチング

一覧へ戻る

.htaccessには以下のように記述しています。

これは特に正規表現を利用せず、1対1対応でURL転送を行う例です。

この指定によって以下のように解釈されます。

説明

RewriteRule ^blog-date-[0-9]{4}[0-9]{2}[0-9]{2}\.html http://redirect.trce.info/num/dot-422/2014/11/27/ [R=302,L]

 

この「[0-9]{4}[0-9]{2}[0-9]{2}」は「.{4}.{2}.{2}」の条件を
さらに「0~9の数字」のみに限定しています。

この場合、4+2+2桁の数字になりますので、8文字(8byte)に制限されています。

http://n-modrewrite.trce.info/mrrr/0to9-422/blog-date-20141127.html

 

このパターンを利用すると、後述する実例のように利用ができます。

 

転送と動作確認

URLにアクセスすると、転送先に正しく転送されるのが確認できます。

 

 

その他の記述例

●Redirect Match ●RewriteCond

 

 

実例と.htaccess設定

一覧へ戻る

.htaccessには以下のように記述しています。

これは特に正規表現を利用せず、1対1対応でURL転送を行う例です。

この指定によって以下のように解釈されます。

 

説明

RewriteRule ^blog-date-([0-9]{4})([0-9]{2})([0-9]{2})\.html http://redirect.trce.info/num/solution/$1/$2/$3/ [R=302,L]

 

この「[0-9]{4}[0-9]{2}[0-9]{2}」を実例で紹介すると、
それぞれを括弧で囲み「([0-9]{4})([0-9]{2})([0-9]{2})」指定することで、

置換文字列へそれぞれの数字を引き継がせることができます。

これによって、

http://n-modrewrite.trce.info/mrrr/solution/blog-date-20141127.html へのアクセス要求が、

http://n-modrewrite.trce.info/num/solution/2014/11/27/ へと転送されることになります。

 

サンプルではこの日付のみですが、
要求された日付によって、転送先のURLを動的にすることが可能です。

 

転送と動作確認

URLにアクセスすると、転送先に正しく転送されるのが確認できます。

 

 

プロモーション(btm)

Google or AdMax Promotion (it)

さいごに

mod_rewriteのRewriteCondを利用した条件判定は、
サイトでもよく見かけることと思います。

しかしいざ自分で書いてみると動かなかったりと、億劫な作業ではないでしょうか。

しかし、大抵は単純ミスであることが多いものです。

動かないと思ったら、まずは単純なパターンを試し、
徐々に複雑な条件で記載していくと、条件の切り分けが簡単になります。

 


公開日:

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

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

Rakuten Promotion

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