◆ .htaccessについて
.htaccess ファイルとは何かについては、.htaccessとは?(Qiita様)などを参照してください。
無料レンタルサーバなどでは .htaccess を無効にしているところもあります。サーバの仕様を確認してください。(XREA様は使えます)
◆ 正規表現
.htaccessは正規表現という記号セットを使います。
正規表現についてここで詳しくは説明できませんが、最低限の説明をしておきます。
RewriteRuleコマンドの引数第一項にある ^ は「先頭」を意味する記号で、$ は「末尾」という記号です。 (.*)は任意の文字を意味します。第一項の (.*) にマッチした文字列が第二項の $1 に代入されます。 そして第二項が意味するアドレスに飛ぶという仕組みになります。 (具体例は基本編以降参照)
RewriteRule 第一項 第二項 [R=301,L]
◆ Rewrite機能をONにする
RewriteRuleコマンドより前に、Rewrite機能をONにする命令を書きます。(最初にひとつ書けばOK)
RewriteEngine on
◆ 基本編
ページ単位のリダイレクト
旧URL http://example.com/old.html
新URL http://example.com/new.html
RewriteRule ^old.html$ /new.html [R=301,L]
ディレクトリ単位のリダイレクト
旧URL http://example.com/old/aaa.html
旧URL http://example.com/old/bbb.html
新URL http://example.com/new/aaa.html
新URL http://example.com/new/bbb.html
RewriteRule ^old/(.*)$ /new/$1 [R=301,L]
ドメイン全体のリダイレクト(サーバー引っ越しなど)
旧URL http://example-old.com/
新URL http://example-new.com/
RewriteRule ^(.*)$ http://example-new.com/$1 [R=301,L]
◆ 応用編
※第一項、第二項のみ記述。(RewriteRule と [R=301,L] は省略)
ディレクトリの扱い
旧URL http://example.com/test/old.html
新URL http://example.com/test/new.html
^test/old.html$ /test/new.html
↑は .htaccess を / に置いた場合の書き方です。普通は .htaccess は / に置き、このような書き方をしておけばいいです。
(A) ^old.html$ /test/new.html ○
(B) ^old.html$ new.html ×
↑は .htaccess を /test/ に置いた場合の書き方です。 Bの書き方でもうまくいきそうですが、Aのように書かないとうまく飛びません。
第一項は相対パスでよいですが、第二項はフルパスで書く必要があるようです。Bでどこに飛ぶかはサーバの設定によります。(注意)
ドメイン&ディレクトリの同時変更
旧URL http://example-old.com/aaa/
新URL http://example-new.com/bbb/
^aaa/(.*)$ http://example-new.com/bbb/$1
旧URL http://example-old.com/aaa/
新URL http://example-new.com/
^aaa/(.*)$ http://example-new.com/$1
◆ www あり&なしの統一
RewriteCondというコマンドを使います。条件指定に合致した場合のみ、次行のRewriteRuleが執行されます。
RewriteCond %{HTTP_HOST} ^example.com
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^www.example.com
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]
上は www ありに、下は www なしにそろえる方法です。
こうして表示をそろえる方法を正規化といいます。 正規化についてはHTMLクイックリファレンス様なども参考にしてみてください。
★ その他の注意点 ★
.htaccessはブラウザがキャッシュしてしまうらしく、ブラウザで確認しながら.htaccessを編集すると、変更がうまく反映されないことがあります。
WWWCなどの http ソフトで確認した方がやりやすいかもしれません。