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

Google or AdMax Promotion(page)

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

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

 

mod_rewrite(RewriteCond)による条件判定

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

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

 

 

検証と.htaccess設定

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

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

 

URL固定によるマッチング

一覧へ戻る

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

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

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

説明

RewriteCond %{REQUEST_URI} ^/mrrc/static/blog-date-20141127\.html$
RewriteRule ^ http://redirect.trce.info/num/static/2014/11/27/ [R=302,L]

 

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

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

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

 

転送と動作確認

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

 

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

一覧へ戻る

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

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

 

説明

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

 

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

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

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

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

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

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

 

転送と動作確認

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

 

 

その他の記述例

●Redirect Match ●RewriteRule

 

 

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

一覧へ戻る

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

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

 

説明

RewriteCond %{REQUEST_URI} ^/mrrc/dot-8/blog-date-.{8}\.html$
RewriteRule ^ 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/mrrc/dot-8/blog-date-20141127.html 

 

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

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

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

 

転送と動作確認

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

 

その他の記述例

●Redirect Match ●RewriteRule

 

 

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

一覧へ戻る

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

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

 

説明

RewriteCond %{REQUEST_URI} ^/mrrc/dot-422/blog-date-.{4}.{2}.{2}\.html$
RewriteRule ^ 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/mrrc/dot-422/blog-date-20141127.html

 

転送と動作確認

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

 

 

その他の記述例

●Redirect Match ●RewriteRule

 

 

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

一覧へ戻る

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

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

説明

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

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

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

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

 

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

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

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

 

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

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

 

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

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

 

転送と動作確認

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

 

その他の記述例

●Redirect Match ●RewriteRule

 

 

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

一覧へ戻る

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

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

 

説明

RewriteCond %{REQUEST_URI} ^/mrrc/dot-4to8/blog-date-.{4,8}\.html$
RewriteRule ^ 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/mrrc/dot-4to8/blog-date-20141127.html

転送と動作確認

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

 

 

その他の記述例

●Redirect Match ●RewriteRule

 

 

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

一覧へ戻る

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

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

説明

RewriteCond %{REQUEST_URI} ^/mrrc/0to9-4to8/blog-date-[0-9]{4,8}\.html$
RewriteRule ^ 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/mrrc/0to9-4to8/blog-date-20141127.html   

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

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

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

 

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

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

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

 

転送と動作確認

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

 

その他の記述例

●Redirect Match ●RewriteRule

 

 

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

一覧へ戻る

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

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

 

説明

RewriteCond %{REQUEST_URI} ^/mrrc/0to9-422/blog-date-[0-9]{4}[0-9]{2}[0-9]{2}\.html$
RewriteRule ^ 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/mrrc/0to9-422/blog-date-20141127.html

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

 

 

転送と動作確認

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

 

その他の記述例

●Redirect Match ●RewriteRule

 

 

実例と.htaccess設定

一覧へ戻る

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

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

説明

RewriteCond %{REQUEST_URI} ^/mrrc/solution/blog-date-([0-9]{4})([0-9]{2})([0-9]{2})\.html$
RewriteRule ^ 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/mrrc/solution/blog-date-20141127.html へのアクセス要求が、

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

 

転送と動作確認

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

 

 

プロモーション(btm)

Google or AdMax Promotion (it)

さいごに

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

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

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

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

 


公開日:

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


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

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

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

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

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

Rakuten Promotion