SSブログ

短縮URLサービスの仕組みと、超簡単な作り方 [Apache]

世間では、ツイッターが流行していて、あたしも利用していたりします。

ツイッターは、投稿文字数に140文字の制限がありますから、
長いURLを貼ると、文字数をかなり消費してしまいます。

[追記:2014.09.21]
・・・というのは一昔前の話で、現在はTwitter側が http://t.co/~ という短縮URLに強制的に置き換えています。
したがって、投稿者が長いURLを短縮するためだけに短縮URLを作成する意味は無いでしょう。
Twitterで短縮URLを用いると、リダイレクトが2度発生するなどのデメリットも生じます。
短縮URLサービスのアクセス解析などを利用する目的なら、話は別ですが・・・
Twitter公式のアクセス解析にてリンクのクリック数を調べることができるので、もはやTwitter用途の短縮URLは不要かもしれません。

これを踏まえて、以下参考程度にしていただければと思います。



そこで、長いURLを短く短縮するサービスが利用されます。
http://bit.ly あたりは、ツイッターを利用している方なら
一度は見たことがあるかと思います。

他にも、サイト独自の短縮URLを用意しているところもあります。
ニコニコ動画なら、http://nico.ms、pixivなら、http://p.tl
などです。

このようなサービスは、
文字数が短くなるという利点はあるのですが、
特に、サイト独自の短縮URLサービス以外のものだと、
どこに転送されるか分からない、といった不安もあるかと思います。

このような、短縮URLサービスを含めたURLの安全性に関しては、
また後日触れたいと思います。


今回は、短縮URLサービスの仕組みについて。

仕組みといっても、ふたを開ければ超簡単な話で、
WebサーバのHTTPリダイレクト機能というものを使えば簡単に実現できます。

たとえば、http://0w0.tv/ReOF という短縮URLがあります。
上のURLをクリックすると、Yahoo! JAPAN のサイトに飛ぶはずです。

この例では、ReOF というファイルにアクセスした場合、
http://www.yahoo.co.jp にリダイレクト(転送)しなさい、
という命令をWebサーバの設定ファイル記述しておくだけです。
これが、HTTPリダイレクト機能です。

具体的には、.htaccess ファイルに以下のように記述します。
(.htaccessファイルが分からない方は、ググってくださいw)

Redirect permanent /ReOF http://www.yahoo.co.jp

たったこれだけで、HTTPリダイレクトが実現でき、
URLを短縮することができます。

.htaccess が許可されているレンタルサーバを借りているか、
サーバを運用している人は、
簡単に自分だけの短縮URL(転送URL)を作ることができます。

ちなみに、http://0w0.tv/ReOF を開いたときのHTTPヘッダを見てみましょう。
(FireFox なら、Live HTTP headers というアドオンを入れると見られます)

HTTP/1.1 301 Moved Permanently
Date: Wed, 25 Aug 2010 10:36:55 GMT
Server: Apache/2.2.3 (CentOS)
Location: http://www.yahoo.co.jp
Content-Length: 301
Connection: close
Content-Type: text/html; charset=iso-8859-1

LocationにURLが記述されていることが分かります。
このURLが転送先を示しています。

また、301 Moved Permanently という記述がありますが、
いわゆる 301リダイレクトというもので、永久的なURLの移動を示しています。

余談ですが、302リダイレクト(一時的なURLの移動)というものもあります。
短縮URLの場合は、短縮URL=転送先URLと永久に結びつけるわけですから、
302リダイレクト(一時的なURLの移動)ではなく
301リダイレクトで実現するのが正しいと思います。
(一時期、302のほうがいいのかとも迷いましたが、
 bit.lyはじめ色々な短縮URLのヘッダを見たら、すべて301でした)


では、自分で本格的にbit.lyのような短縮URLサービスを作るには
どうしたらいいのでしょう。


まずは、出来るだけ短いドメイン名を取得しましょう。
ただし、これがいちばん難しかったりしますw

TLD(ドメイン)の種類にもよりますが、基本的には3文字以上しか取れません。
一部、2文字でも取れるところもあります。
しかし、単語として意味ありげな3文字のドメイン名は
殆ど取りつくされてしまっており、3文字のドメイン名でさえ取得は困難です。

次に、Webサーバを用意します。
自宅でサーバを立ててもいいですし、レンタルの安いVPSサーバでも十分でしょう。
Webサーバの基本的な設定は済ませておきます。
(.htaccessに対応している独自ドメイン対応の共用サーバでも良いですが、
出来れば、Webサーバの設定を変更することが可能なVPSサーバをおススメします)

DNSなどの設定を一通り済ませて、Webサーバにドメイン名で
アクセスできるようにします。

そして、Webページ上に転送先のURLを記述するフォームを作成し、
転送元のファイルを生成することと、.htaccess ファイルに
Redirect permanent の行を追加するスクリプトを書いてあげるだけです。

ほら、簡単でしょ
(説明が簡単とかいうツッコミは無しでw)
これなら誰でも出来るはずです。

短縮名は、ランダムに生成してもいいですし、
希望の短縮名を入力する欄を設けてもいいと思います。

また、スパムなどの踏み台に利用されないように常に注意を払う必要があります。
このためには、生成された短縮URLは、定期的にチェックする必要があるでしょう。

いちばん重要なことですが、
サービスを止めてしまうと、それまでに作成された短縮URLがすべて
使えなくなってしまいます。
ですから、一度始めたら、長期間運用する覚悟が必要です。

[追記:2014.09.21]
・・・と、この後に私が運営していた http://0w0.tv の紹介をしていたのですが、現在はサービスを停止しています。
前述のとおり、短縮URLは踏み台に使用されることも多く、予防策を講じたところでも防ぎ切れません。
実際、0w0.tv もこういった悪意のあるURLの短縮や、迷惑メールなどに利用されることも多くあり、その度に、サーバの運営会社から至急の対応と今後の予防策を報告せよとの連絡を度々受けていました。
短縮URLサービスの特性上仕方のないことではありますが、誰でも利用可能な短縮URLサービスにおいて完全な予防策を講じる手段が無い現状どうすることもできず、結果的にサービスを一時停止する判断としました。

この記事を書いた頃と比較すると今ではかなり多くの短縮URLサービスが存在するようですが、こういった不正な利用に対する覚悟が必要なことを、運営者、利用者ともに十分理解する必要があるでしょう。



関連記事:
Apacheのリダイレクト機能を使ってディレクトリ単位でURL転送を行う
ドメインを取得するならどこがいい?


(2010年11月10日 一部改訂)
(2014年9月21日 一部改訂)
タグ:Apache 短縮URL

Apacheクックブック 第2版 ―Webサーバ管理者のためのレシピ集
Ken Coar Rich Bowen
オライリージャパン
売り上げランキング: 63578



nice! 1

コメント 8

ありす

初めまして。
短縮urlの仕組みを調べていてこちらにお邪魔させていただきました。
くだらない質問なのですが、毎回変化するurlを自動的に生成するような方法はないのでしょうか?
by ありす (2011-02-03 02:43) 

aoicchi

>ありすさん
ご訪問&コメントありがとうございますv

"毎回変化するURL"という意味が具体的に分からないので、
2通りの解釈で回答しておきますね。

1. 転送先が毎回変化するURLに、ある一つの短縮URLで転送出来るか
(例:http://0w0.tv/foobar -> http://example.com/****.html の ****が毎回変化)

URLリダイレクトは、基本的には転送元、転送先が 一対一 の関係になりますから、
実現は難しいとおもいます。
Redirect permanent の転送先を何らかの方法で書き換えるか、
あるいは、間にPerl等のスクリプトを挟んで、動的にリダイレクト先を変更することは
可能だと思います。

もう一つの方法として、Apache の Rewrite 機能でURLリダイレクトを実現する方法も
ありますが、こちらも基本的には Redirect と同じで 一対一での転送になります。
ただし、正規表現が使用できる分、Redirect より自由度は高いです。
(詳細は割愛します)

2. 転送元の短縮URLをランダムに生成する方法
(例:http://0w0.tv/**** の **** をランダムに生成)

これは、単純にPerl等のスクリプトを組めば、簡単に生成できます。
ソースコードが必要でしたら、掲載します。
by aoicchi (2011-02-03 21:57) 

ありす

お返事ありがとうございました。
私には少し難しいようですのでもっと勉強してから出直します(^_^;)
by ありす (2011-02-06 11:02) 

aoicchi

>ありすさん

おっと、少し難しく書いてしまったようで、すみません><
分かりやすく説明できるように心がけます^^;
疑問点などありましたら、遠慮なくご質問くださいね。
by aoicchi (2011-02-07 21:06) 

RON

URLの短縮について調べていて辿り着きました。
現在自分で環境を用意出来ないものかと思っていますが
ランダム作成で躓いておりまして、できればURLのランダム作成方法のソースコードを掲載していただけないでしょうか?

何卒~~!
by RON (2011-05-09 16:11) 

aoicchi

>RONさん

お返事が遅くなり、申し訳ございません;
Perlでランダムに文字列を生成する方法を書いてみましたので、
よろしければ参考にしてみてください。
http://aoi-f.blog.so-net.ne.jp/2011-05-15

短縮URLの生成に用いる場合、既に生成された短縮URLと重複しないか
チェックする必要がありますので、お忘れなく。
by aoicchi (2011-05-15 05:30) 

ユウ

短縮URLのご説明とても参考になりました。
ありがとうございました。

by ユウ (2011-08-27 17:00) 

いちのさん

短いURLを自分で管理するスクリプトのページです
ランダムは同一URLを生成する可能性があるので
ナンバリングがいいと思います
by いちのさん (2012-08-30 11:56) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0

トラックバックの受付は締め切りました

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。