301リダイレクトは
.htaccessにURLを書き換えるコードを追加することで使えるようになります.
htaccessとはWebサーバに対して様々な設定を行うファイルのことです.
.htaccessでリダイレクトを行う方法は,
mod_rewriteを使うやり方と,
Redirectディレクティブを使うやり方の2種類あります.
この2つの違いは,ApacheのモジュールでURLを書き換える機能を持つ
mod_rewriteを使うか使わないかです.
サーバにmod_rewriteモジュールがインストールされていない場合は,
Redirectディレクティブ(リダイレクトを指示するコード)で301リダイレクトを行うことができます.
mod_rewriteを使ったリダイレクト
Webサイト
aaa.htmlへのアクセスをbbb.htmlへリダイレクトは以下のようなコードになります.
RewriteEngine on
RewriteRule ^aaa.html$ http://example.com/bbb.html [R=301,L]
このコードを.htaccessに追加することで,
aaa.htmlへのアクセスを,
http://example.com/bbb.htmlへ転送させることができます.
※これはaaa.htmlと.htaccessが同じディレクトリ内にある場合の書き方で,aaa.htmlが下位のディレクトリ内にある場合は
ディレクトリ名も記述します.(aaa.htmlがabcディレクトリ内にある場合:^abc/aaa.html$)
Webサーバ内の
すべてのファイルを特定のページへリダイレクトさせる場合は
^(.*)$を使います.
RewriteEngine On
RewriteRule ^(.*)$ http://example.com/bbb.html [R=301,L]
これにより,
.htaccessの有効範囲にある全てのファイルに対して,
http://example.com/bbb.htmlへのリダイレクトを行うことができます.
ディレクトリ単位でのリダイレクトを設定することによって,
指定したディレクトリ内のファイルにのみリダイレクトを設定することもできます.
RewriteEngine on
RewriteRule ^abc(.*)$ http://example.com/bbb.html [R=301,L]
このように記述すれば
ディレクトリabc内のファイルにアクセスがあった際に,
http://example.com/bbb.htmlへ転送するよう設定されます.
Redirectディレクティブを使った方法
Webサイト
aaa.htmlからbbb.htmlへのリダイレクトは次のコードになります.
Redirect permanent /test/aaa.html http://example.com/abc/BBB/bbb.html
このようにRedirectディレクティブでは,
Redirect permanent リダイレクト元 リダイレクト先
という感じの構文でリダイレクトを記述します.
リダイレクト元の部分は,ドメイン名より下位のディレクトリ構造を
スラッシュ/から始めて書いていきます.
リダイレクト先の部分は基本的に絶対パス(httpやhttpsから始まるURL)を記述しますが,リダイレクト元の書き方と同様に
/から始まるディレクトリ構造で記述することも可能です.
例
Redirect permanent /test/aaa.html /test/abc/bbb.html
その場合
リダイレクト元と同じスキーム(http://又はhttps://)・ドメイン名が追加されたことになります.
ちなみに,Redirect permanentは
Redirect 301と書くこともできます.
下位のディレクトリ構造は同じで,ドメインだけ移転した際は以下のコードでドメインのみを変更してリダイレクトできます.
Redirect permanent / http://example.com/
これは,ドメインより下の
ディレクトリ・ファイル名は保ったままで指定したドメインにリダイレクトしてくれます.
この例では,アクセスのあったURLに対してドメイン名を
example.comに変更しています.
例えば,
domainA.comというドメインを使っている際,
http://domainA.com/test/abc/index.htmlにアクセスがあった場合,このリダイレクトを設置していれば,ドメインの後に続くディレクトリ名・ファイル名の部分は変化させずに,
http://example.com/test/abc/index.htmlという風にドメインの部分だけを書き換えてそこにリダイレクトさせることができます.
特定のディレクトリを別のディレクトリへリダイレクトするには,次のようなコードを記述します.
Redirect permanent /abc/ http://example.com/ABC/
この例では,abcディレクトリへのアクセスを
http://example.com/ABC/へリダイレクトします.
例えば,
http://example.com/abc/aaa/index.htmlにアクセスした際,
http://example.com/ABC/aaa/index.html
にリダイレクトされます.(下層のディレクトリ・ファイル名は保ったまま)
※パスの書き方には注意してください.もし,abcディレクトリが,ディレクトリbbbの下位ディレクトリである場合,
Redirect permanent /bbb/abc/ http://example.com/ABC/
のように記述しなければなりません.
リダイレクト元の部分には,
スキームとドメイン名を除いたそのディレクトリまでのパスを記述する必要があります.