2008年5月26日(月) 23時16分53秒 [ソフトウェア ]
CMSツールみたいな比較的でかいシステムをウェブ上に設置する場合、分かりやすい階層を作ろうと思うと、階層が深くなってしまうことがあります。生成したページ群をそのままCMSツールのあるディレクトリ以下に配置すると、アクセス者に閲覧してもらうページのURLも長くなってしまいます。しかし、アクセス者には簡易なURLでアクセスさせたいと思うことがあります。下記のような感じで。
実体: http://www.example.com/cms/movabletype/sites/diary/
簡易: http://www.example.com/diary/
こういう場合、/diary/ へのアクセスをすべて /cms/movabletype/sites/diary/ へ移動させる、リダイレクト機能を使う手があります。しかし、リダイレクトだとブラウザのアドレス欄に表示されるのは移動後の長いURLですし、検索エンジンに拾われるのも長いURLの方になってしまいます。
こんなときは、リダイレクトで処理するよりも、シンボリックリンクを作る方が望み通りの構造を作れます。
/cms/movabletype/sites/diary/ へのシンボリックリンクを /diary/ として作成すると、あたかも /diary/ ディレクトリが存在するかのように見せることができます。実際には、すべて /cms/movabletype/sites/diary/ ディレクトリ内のファイルが参照されますが、エンドユーザから見ると /diary/ ディレクトリにアクセスしているように見えます。
このシンボリックリンクを使えば、実体は深い階層に置いたまま、表面上は浅い階層にあるように見せることができます。
ブラウザのアドレス欄に表示されるのは短いURLの方ですし、検索エンジンに拾われるのもやはり短いURLの方です。リダイレクトのように転送されるわけではありませんから。
シンボリックリンクを作る
リダイレクトは、Apacheの機能で「.htaccess」ファイルにでも移動処理を書いておけば済みます。シンボリックリンクは、UNIX系OSのファイルシステムの機能なので、Telnetクライアントなどでサーバにログインして、lnコマンドを使って作成します。(ウェブサーバに使っているシステムとは無関係)
シンボリックリンクを作るには、コマンドラインから lnコマンドを -s オプションを付けて実行します。下記みたいな感じで。
ln -s [実体ディレクトリ] [シンボリックリンク名]
「実体ディレクトリ」はサーバ上のフルパスで指定します。(シンボリックリンク名もフルパスで書いても構いませんが。シンボリックリンク名だけを書けば、カレントディレクトリ上に作られます。)
ln -s /home/myaccount/www/cms/movabletype/sites/diary/ diary
すると、カレントディレクトリ上に、指定実体ディレクトリ(上記の場合は、 /home/myaccount/www/cms/movabletype/sites/diary/ ディレクトリ)へのシンボリックリンク「diary」ができます。
その結果、
■http://www.example.com/cms/movabletype/sites/diary/
へのアクセスが、
■http://www.example.com/diary/
という短いURLでできるようになります。
リダイレクト(転送)とは異なるのは、ブラウザのアドレス欄には http://www.example.com/diary/ の方が表示され続けることです。そうなるのは、あたかも実体がこっちにあるかのように(ユーザエージェントには)見えるからです。
もちろん、トップページ以降のあらゆるページ(ファイル)も同様です。
うちのサーバ上でも使いまくってます。
なお、上記のように見えるのはウェブ上から見た場合の話であって、TelnetソフトやFTPソフトなどで実際にサーバ上のディスクスペースを覗いた場合は、シンボリックリンクをたどると、実体側のパスが表示されます。Windowsでいう「ショートカット」のようなものです。(なので、どこが何に繋がっているのかが把握しにくくなることはありません。)