ドメイン名(FQDN)から配下のページにリダイレクトする.htaccessの書き方


はじめに

http://hoge.comにアクセスされた時に
http://hoge.com/fuga/index.htmlにリダイレクトさせる.htaccessの書き方を紹介します。

コード&解説

.htaccessはルートディレクトリに配置し、最終的な記述はこうなります↓

.htaccess
<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /
    RewriteRule ^$ http://hoge.com/huga/index.html [R=301,L]
</IfModule>

一行ずつ解説していきます。

<IfModule mod_rewrite.c>

mod_rewriteはApacheサーバでURLの書き換えを行うモジュールです。
mod_rewriteが使えない環境ではmod_rewriteのコードが実行されるとエラーが発生します。
<IfModule mod_rewrite.c>,</IfModule>はmod_rewriteが使える環境でのみタグの中に記述されたコードを実行します。

RewriteEngine on

mod_rewriteの機能を有効化します。offとすれば無効化されます。

RewriteBase /

Rewrite処理のベースとなるディレクトリを指定します。
RewriteBase /とした場合、.htaccessが配置されているディレクトリが指定されていることになります。
(.htaccessの有効範囲についてはこのサイトが参考になりました)

また、この記述がない場合は、htaccessを設置しているディレクトリが自動的に選択されますが、これはRewriteRuleを相対パスで記述した場合にのみ適用されるそうです。
なので特に理由がなければRewriteBaseを指定した方がいいかと思います。

RewriteRule ^$ http://hoge.com/huga/index.html [R=301,L]

基本の書き方

RewriteRule A B [C]

AにアクセスされたらBにリダイレクトする[恒久的か一時的か指定]
という風に書きます。

Aの部分

転送元を指定します。
RewriteBaseで指定したディレクトリ以下を記述することに注意です。

今回の^$はどちらも正規表現で
- ^:文字列の始まりの意味
- $:文字列の終わりの意味
になります。
.htaccessがルートディレクトリに配置しRewriteBase /としているので、「hoge.comにアクセスされたら」という意味になります。

Bの部分

リダイレクト先のURLを書きます。
転送元の記述と違って、URLの先頭から記述します。

Cの部分

301リダイレクトか、302リダイレクトか指定します。
302リダイレクトにしたい場合は[R=302,L]とします。

まとめ

.htaccessについて調べるとRewirteRuleについて書かれている記事がたくさん出てきますが、うまくいかない理由として.htaccessを置く場所、RewriteBaseの記述もある気がしました。
誰かの参考になれたら嬉しいです。

参考サイト

.htaccessを使ったよく使うリダイレクトまとめ
.htaccessを用いたURL書き換えをマスターする・前編
今さら人に聞けない!WordPressで使われているmod_rewriteの説明書