プログラムブログ

PHP、Database、ネットワーク、サーバセキュリティ

apacheでのリダイレクト方法

とあるサイトを運営しているのだが、コンテンツはそのままでドメイン名を変更したくなった。新しいドメインを取得してコンテンツをそこに移動すればとりあえずはドメイン名の変更ができるのだが、旧URLに対して外部からリンクが張られていたり、googleなど検索エンジンで旧URLがインデックス登録されていることを考えると、何か策が必要になる。そこで旧URLにアクセスされたときは新URLへリダイレクト(301)するということになる。

Apacheであれば旧URLのトップに 次の.htaccessを作成すればよい(mod_rewriteが対応していることを前提としている)。

Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*) http://新FQDN/$1 [R=301,L]

これで私の場合は旧URLから新URLへリダイレクトされるようになった。ちなみにコマンドラインで旧URLにアクセスしたときのレスポンスは次のようになった。

telnet 旧FQDN 80

GET / HTTP/1.1
Host: 旧FQDN

(ここからレスポンス)
HTTP/1.1 301 Moved Permanently
Date: 時刻
Server: Apache
Lcation: http://新URL/
Content-Length: 数字
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC “-//IETF//DTD HTML 2.0//EN”>
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href=”http://新FQDN/”>here</a>.</p>
<hr>
<address>Apache Server at 旧ドメイン Port 80</address>
</body></html>
Connection closed by foreign host.

5 Comments so far

  1. shige 4 月 27th, 2008

    私の場合、旧URL http://wallpaper.jpn.org/
    から新URLにリダイレクトするため、.htaccess ファイルの
    内容に

    deny from all

    Redirect permanent / http://shige-wallpaper-images.com/
    order deny,allow
    と書いて旧サーバーにアップロードしてるのですが、これでもリダイレクトされております。
    Options +FollowSymLinks
    RewriteEngine on
    RewriteRule (.*) http://新FQDN/$1 [R=301,L]
    の使い方との違いは何でしょうか?私には難しくて理解できません。よろしくお願いします。
    又、旧サイトがサーバー会社との解約でリダイレクト命令が送信されなくなった時点からは、旧サイトにアクセスしたらどうなるのでしょうか?よろしくお願いします。

  2. it 4 月 30th, 2008

    shigeさん、はじめまして。

    Redirect permanent でも同様にリダイレクトされますね。

    以下ためした結果です。

    > telnet wallpaper.jpn.org 80
    Trying 59.106.19.108…
    Connected to wallpaper.jpn.org.
    Escape character is ‘^]’.
    GET / HTTP/1.1
    Host: wallpaper.jpn.org

    HTTP/1.1 301 Moved Permanently
    Date: Wed, 30 Apr 2008 14:22:29 GMT
    Server: Apache/1.3.39 (Unix)
    Location: http://shige-wallpaper-images.com/
    Transfer-Encoding: chunked
    Content-Type: text/html; charset=iso-8859-1

    138
    < !DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">

    Moved Permanently

    The document has moved here.


    Apache/1.3.39 Server at wallpaper.jpn.org Port 80

    0

    Connection closed by foreign host.

    今回の場合はどちらも同じ動作ですが、あえて違いをあげるなら、mod_rewriteをつかえばR=301をほかの値にかえたりといった柔軟な挙動変更が可能ですね。

    >又、旧サイトがサーバー会社との解約でリダイレクト命令が送信されなくなった時点からは、旧サイトにアクセスしたらどうなるのでしょうか

    旧サーバのコンテンツ(.htaccess)が削除されてしまえば Not Found になってリダイレクトはされないでしょうね。

  3. shige 5 月 1st, 2008

    早速のご回答ありがとうございました。それにしても理解できないのはリダイレクトを説明したサイトは沢山ありますが、リダイレクトする事によって旧サイトを訪問した人はサイトが移転したことなど知らないまま新サイトにリダイレクトされて便利、と記述されており、恰も何もかも解決されたかの様に受け取られ勝ちですが、旧サイトを閉鎖すれば元の木阿弥という事になるだけですね。
    リダイレクトという手法は、単にリンクポピュラリティーだけを引き継ぐ手段に過ぎないという気がしてなりません。このような解釈でよろしいでしょうか?よろしくお願い致します。

  4. it 5 月 2nd, 2008

    郵便局に転居届を出して郵便物を転送してもらうようなイメージで私は考えています。検索エンジンで訪れる人が Not Found で残念な思いをしないように。リダイレクトのためだけに有料レンタルサーバを借りているのならば、検索エンジンに新URLが認識されれば私だったら旧ドメインは解約しますね。
    人気サイトだとお気にいりからのアクセスも考慮にいれないといけないかもしれませんが。。

  5. shige 5 月 2nd, 2008

    アドバイス有難うございます。レンタルサーバーは前払いですので来年の2月まで有効になっております。まあ、元の木阿弥でもいいのですけどね。
    新たにサイトに来てくれる人達に期待したいと思います。
    大変有難うございました。いろいろ勉強になりました。

Leave a reply