.htaccess で URL のリダイレクトを行う。

SERVER


.htaccess で恒久的なリダイレクトを行う

Web サイトでページを移動したときなど、古いページへのアクセスが失敗しないために、新しいページへの転送設定を行いたい場合があります。

その方法として URL リダイレクトというものがあります。特に SEO 対策などで、検索エンジンに対してそのリンクが無効になったのではなく移動したことを知らせるためにも、この URL リダイレクトは重要です。

 

Web サーバーとして Linux の Apache を使用している場合には、".htaccess" ファイルを Web サイトにアップロードすることで、特定の URL を別の URL に転送 (リダイレクト) することが可能です。

なお、一般的な Web サーバーは Apache を利用しているので大丈夫だとは思いますが、対応していないサーバーもあるので注意しましょう。

ファイル単位でリダイレクトする

たとえば、自分のサイトの "http://www.ez-net.jp/contents/old.html" を "http://www.ez-net.jp/new-contents.html" に転送設定したいとします。

この時、".htaccess" ファイルに次の行を追加します。

Redirect permanent /contents/old.html http://www.ez-net.jp/new-contents.html

注意点としては、転送元の URL は "/" から始まる URL の絶対パスで指定しますが、転送先は "http://" から始まる URL で指定するところでしょうか。

ともあれこのように設定した ".htaccess" を、Web サイトのトップかそれ以下の必要な場所にアップロードすれば、古い方の URL でサーバーへアクセスした際に、新しい URL へ自動的に移動されます。

ディレクトリー単位でリダイレクトする

サイトのディレクトリー構成を変更して、あるディレクトリーが別の場所に移動したような場合には、ディレクトリー単位での転送設定が便利です。

例えば "http://www.ez-net.jp/history/" を "http://www.ez-net.jp/history-2010/" に変更した場合には、次のように設定します。

Redirect permanent /history/ http://www.ez-net.jp/history-2010/

このようにすることで、例えば "http://www.ez-net.jp/history/01.html" へアクセスされた場合でも、自動的に "http://www.ez-net.jp/history-2010/01.html" に転送されるようになります。02.html についても同じです。

条件に一致した URL だけリダイレクトする

例えば、拡張子 .asp へのアクセスのすべてを .php に変更したいような場合でも、".htaccess" で対応することができます。

リダイレクトには、これまでの "Redirect" の他に、正規表現による条件指定が利用可能な "RedirectMatch" というものがありますので、上記のように拡張子によって転送先を変えたい場合にはこちらを利用します。

RedirectMatch permanent ^/([^\?]*)\.asp(|\?.*|#.*)$ http://www.ez-net.jp/$1.php$2

例えばこのようにすることで、上記のように ".asp" から ".php" への変換を行うことができます。あくまでも URL だけの変換ですが、なんらかの都合で拡張子を変えなければならなくなった場合に便利だと思います。

条件しては "正規表現" を使用するため複雑ですが、緻密で多彩な条件指定も可能です。

 

.htaccess で一時的なリダイレクトを行う場合

上記の例では Web ページの引っ越しを行った場合について記してきましたが、何らかの理由で一時的に、あるページを閉鎖したような場合には、もっと適した転送方法があります。

それは、上記の "Redirect" や "RedirectMatch" の後の "permanent" のところを "temp" にすることで、その転送は一時的なものであることを示すことが可能です。

最初の例では、次のような感じです。

Redirect temp/contents/old.html http://www.ez-net.jp/new-contents.html

これにより、リダイレクトの表向きな動作としては同じですが、HTTP ステータスコードとして "302 Moved Temporary" が返されます。

ちなみに "permanent" を指定した場合には、HTTP ステータスコードとして "301 Moved Permanently" を返します。