.htaccess活用法(6)

.htaccess(拡張子がhtaccessということで、ドットが必要です。ファイル名がないので最初戸惑いますが、こういうものだと思ってください。)が利用可能だと、

6.リダイレクト機能を利用する

ホームページを運営していると、ディレクトリー構造の変更などでどうしても、ファイルの移転が必要なケースが出てきます。また、今まではプロバイダの無料スペースに置いていたのをドメインを取得し、レンタルサーバで運営することになったとします。かと言って、旧URLには検索エンジン経由などで多くのアクセスがあり、このまま閉鎖してしまうのはもったいないというケースもあるでしょう。

このような場合、通常、メタタグを用いて、

<META HTTP-EQUIV="refresh" content="2;URL=http://www.example.com/newpage.html">

などとします。この例で言えば、「2秒後にhttp://www.example.com/newpage.html」にリダイレクトされることになります。多くの場合、これで十分なのですが、この方式だと、考えうる全てのHTMLファイルに対して、このメタタグを放り込んでやらなければならず、ファイルが多いと非常に面倒になります。

また、私が一度体験したケースでは、あるクライアントが、転送量オーバーで、レンタルサーバの事業者から文句を言われたというケースがありました。そこで、画像ファイルだけでも別サーバに移動しようとしたのですが、その画像ファイルのリンク元であるHTMLファイルは山ほどあり、それを書き換えるのは死ぬほど大変ということになりました。

実は、このようなケースでは、.htaccessを使ったリダイレクトで、よりスマートな解法があります。.htaccessでは、ディレクトリー構造そのままにリダイレクトさせることも可能です。

Redirect permanent /test/ http://www.shtml.jp/htaccess/

とすれば、http://www.shtml.jp/test/以下にあるファイルへのアクセスがあった場合には、リダイレクトされます。例えば、http://www.shtml.jp/test/basic.htmlへのアクセスは、http://www.shtml.jp/htaccess/basic.htmlへリダイレクトされます。

「Redirect permanent」の後ろに、リダイレクト元となる「絶対パス(Apacheの公式マニュアルではこのように書いていますが、この「絶対パス」という書き方は非常に紛らわしいと私は思います。「絶対パス」という用語は、rootディレクトリーからのフルパス/home/●●/public_html/〜を意味して使われていることもあれば、http://〜で始まる絶対URLとしての意味の場合もあります。このケースでは、絶対URLの中から「http://ドメイン名」を省略したパスになります。結局はDocumentRootから見たパスで、かつ「/(スラッシュ)」から始まるものになります。/home/●●/〜と書いても動きません。)」を書き、次に半角スペースを空けて、リダイレクト先を記します。もちろん、リダイレクト先は別のドメインのサーバであって構いません。

仮に、引数になっている「絶対パス」をrootディレクトリーからのフルパスだと解釈してしまうと(Basic認証のときはこの書き方をしましたね。Basic認証については、こちらの章を参照してください。)、

Reidrect permanent /home/hogehoge/public_html/test/ http://www.shtml.jp/htaccess/

と書くと、仮に「http://www.shtml.jp/home/hogehoge/public_html/test/abc.txt」というファイルが実際にあれば、「http://www.shtml.jp/htaccess/abc.txt」に転送されますが、そうでなければ何も起こりません。決して「http://www.shtml.jp/test/abc.txt」へのアクセスが「http://www.shtml.jp/htaccess/abc.txt」に転送されることはありません。

--広告--
【PR】 話題の足裏健康法「樹液シート」

【PR】 マジクール ライトブルー

【PR】 プロバイダ・キャンペーン情報(料金比較)


このように.htaccessを使ったリダイレクトを利用するとディレクトリー単位で移転ができますので非常に便利ですが、最初の事例で紹介したように、画像ファイルだけを移動させたい場合は、どうすればいいのでしょうか?

ちゃんと、パターンマッチによるリダイレクトも可能になっています。「RedirectMatch」というものを使います。

RedirectMatch (.*)\.gif$ http://www.anotherserver.jp$1.jpg

などとします。ここで、正規表現を簡単に説明しますと、「括弧()」で囲まれた部分に入るものが$1に置き換えられます。例えば、「http://www.example.com/test/abc.gif」へのアクセスは「http://www.anotherserver.jp」と「$1 = /test/abc」と「.jpg」を合体させた「http://www.anotherserver.jp/test/abc.jpg」に転送されるという意味になります。


   「ディレクティブ」とは「命令」の意味。

▼ Redirect ディレクティブ
http://httpd.apache.org/docs-2.0/ja/mod/mod_alias.html#redirect

▼ RedirectMatch ディレクティブ
http://httpd.apache.org/docs-2.0/ja/mod/mod_alias.html#redirectmatch



次のページでは、存在しないURLにアクセスしたときに表示される「ページが見つかりません」のようなデフォルトのエラーメッセージをカスタマイズする方法を説明します。