サイトを引っ越しするときやページ移転するときにリダイレクト(転送)させる方法になります。
目次
Rewrite機能をONにする
RewriteEngine on
まずはRewrite機能をONにしてURLの書き換えを可能にします。一度ONにしておけば毎度書かなくてOKです。初期値はoff。
URL書き換えのベースになるURLを指定
RewriteBase /
htaccess
が設置されたディレクトリを基準にします。転送元ではなく、転送後のURLを基準にします。
リダイレクトの書き方
ページ単位のリダイレクト
例)旧URL http://example.com/old.html
例)新URL http://example.com/new.html
RewriteRule ^old.html$ http://example.com/new.html [R=301,L]
※新URLはhttpから始まるフルパスで。
正規表現で^
は行の先頭、$
は行の最後を意味します。
ディレクトリ単位のリダイレクト
例)旧ページ http://example.com/old/index.html
例)新ページ http://example.com/new/index.html
RewriteRule ^old(.*)$ /new$1 [R=301,L]
正規表現で.*
はあらゆる文字列、( )
で囲むと後方の$1
に代入されます。
ドメイン全体のリダイレクト
例)旧ページ http://example-old.com
例)新ページ http://example-new.com
RewriteCond %{HTTP_HOST} ^example-old.com
RewriteRule ^(.*) http://example-new.com/$1 [R=301,L]
RewriteCond
がある場合、直後に記述されているRewriteRule
はRewriteCond
の条件に満たされている場合のみ実行されます。
wwwあり・なしの統一
wwwありの場合
RewriteCond %{HTTP_HOST} ^example\.com
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
wwwなしの場合
RewriteCond %{HTTP_HOST} ^www\.example\.com
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]
index.htmlなしのURLに統一
RewriteCond %{THE_REQUEST} ^.*/index.html
RewriteRule ^(.*)index.html$ http://example.com/$1 [R=301,L]
特定のディレクトリをリダイレクトから除外
RewriteCond %{REQUEST_URI} !(^/除外ディレクトリ名/)
RewriteRule ^$ http://example.com/ [R=301,L]
書き方例
RewriteEngine on
RewriteBase /
#ドメインwwwなしに統一
RewriteCond %{HTTP_HOST} ^www\.example\.com
RewriteRule (.*) http://example.com/$1 [R=301,L]
#ディレクトリ単位のリダイレクト
RewriteRule ^old(.*)$ /new$1 [R=301,L]
#ページ単位のリダイレクト
RewriteRule ^old.html$ http://example.com/new.html [R=301,L]
RewriteEngine off
301リダイレクトと302リダイレクトの違い
301 | 永久に移動するという意味を持つ。引っ越しやページ移動のときに使用。 |
---|---|
302 | 一時的に移動するという意味を持つ。メンテナンスページや期間限定のキャンペーンページなどに使用。 |
その他
[R=301] | 301リダイレクトをしなさいという指定になります。 |
---|---|
[L] | 処理終わり(LAST)の意味。[L] だけだと302リダイレクトになるので必ず[R=301] の指定をするようにします。 |