自前のapacheサーバで短縮URLを運用するためのヒント

独自ドメインで短縮URLを運用するには、
以前書いたようにbitly.comの無料サービスを使うのがお手軽です。
統計情報もでますし。
しかし、実はURLのホスト名部分は
独自URLでも”bit.ly”でも同じ結果になりますし、
ファイル名部分はユーザ側でコントロールできませんし、
プライベートにしか使いたくないURLを登録するのは
なんだか気が引けたりと、
いいことばかりではありません。

私の短縮URLの主な利用動機は、
URLを紙に書いて渡すのが楽ということだったりするのですが、
そもそもアルファベットの大文字小文字入り乱れたURLが
インターネット初心者には心の障壁になるようで
バリアフリーを目指すこの世の中に逆行している気配があります。

ということで、
ServersMan@VPS(Debian,32bit)でちょこっとだけ
テスト運用してみることにしました。
そのうちデータベース連携させようとは思いますが、
今回はさわり程度ということでご了承ください。

まずapacheの設定変更です。
設定ファイル”/etc/apache2/sites-available/default”の

RewriteEngine On

の行の直後に

RewriteRule ^/q/(.*)$ /q.php?shorturl=$1 [PT,L]

の行を追加し、apacheを

# /etc/init.d/apache2 restart

で再起動します。
こうすることで

http://<サーバ名>/q/<文字列>

へのアクセスがapacheの内部的に

http://<サーバ名>/q.php?shorturl=<文字列>

として処理されることになります。

では処理するためのPHPスクリプト”/var/www/html/q.php”を
サンプル程度に作ってみます。
基本的に

$_GET["shorturl"];

で得られた文字列からどこのURLに飛ぶかを判断して
そのURLにリダイレクトさせるだけです。
例えば

http://<サーバ名>/q/g

をgoogleに、

http://<サーバ名>/q/y

をyahooに飛ばしたければ”q.php”は以下のようになります。

<?
$shorturl=$_GET["shorturl"];
$url="";
switch($shorturl){
case "g":
        $url="http://www.google.com";
        break;
case "y":
        $url="http://www.yahoo.co.jp";
        break;
}
if($url!=""){
        header("HTTP/1.1 301 Moved Permanently");
        header("Location: $url");
        exit();
}
?>
<html>
<body>
<?
        print "I have no url about [$shorturl]";
?>
</body>
</html>

あとは応用次第です。