.htaccessで転送する設定の書き方
.htaccessでのRedirectを使った転送について勘違いがあった事に気付いた。なのでこれを機会に調べ直し、備忘録も兼ねて書き残す。
Redirectディレクティブ
RedirectディレクティブはURL-path引数へのアクセスをURL引数へ転送する。
構文はRedirectディレクティブと引数を半角スペースで区切って記述する。引数はstatus,URL-path,URLの3つが指定でき、status引数のみ省略が可能。
Redirect (status) URL-path URL
例えば、次のように記述する。
Redirect 302 /noe http://www.example.com/shinichirou/
Redirect /noe http://www.example.com/shinichirou/
status引数
status引数は転送時に渡すHTTPステータスコードを指定するために記述するが、省略する事もできる。省略した場合はtempを記述した場合と同じになる。
引数は定められた言葉か数字で記述する。以下がそれら。
- permanent
- HTTPステータスコード301、リソースが永久に移動。
- temp
- HTTPステータスコード302、リソースが一時的に移動。status引数を省略した場合のデフォルト。
- seeother
- HTTPステータスコード303、リソースを置き換え。
- gone
- HTTPステータスコード410、リソースが永久に削除。この場合URL引数は省略する。
- 数字(例:301,302,等)
- HTTPステータスコードを数字で記述する事ができる。ただしApacheのコードが知っているものに限る(詳細はhttp_protocol.cのsend_error_response関数を参照)。300~399を記述した場合、URL引数の記述が絶対に必要。
URL-path引数
URL-path引数には転送元になるファイル又はディレクトリのパスを記述する。この転送元のパスはドキュメントルートからの絶対パスで記述する(この引数を私は相対パスだとずっと勘違いしていました)。
例えば、以下のようなディレクトリ構成でtomoyoへのアクセスをshinichirouに転送する場合。
- home
- true_tears
- www(ドキュメントルート)
- shinichirou
- hiromi
- noe
- aiko
- tomoyo
- www(ドキュメントルート)
- true_tears
.htaccessをwwwに置いた場合
Redirect /tomoyo http://www.example.com/shinichirou/
.htaccessをtomoyoに置いた場合
Redirect /tomoyo http://www.example.com/shinichirou/
URL-path引数をドキュメントルートからの絶対パスで記述するので.htaccessを置く場所が違っても記述内容は同じになる。
URL-path引数は前方一致で検索される。そのため、上の例で言えばtomoyo以下にあるファイル又はディレクトリの全てがshinichirouへ転送される対象となる。
URL引数
URL引数には転送先になるファイル又はディレクトリのURLを記述する。
RedirectPermanentディレクティブ
基本的にはRedirectディレクティブと同じだが、RedirectPermanentディレクティブは転送する際のHTTPステータスコードが常に301へ固定されている。
RedirectPermanent URL-path URL
つまり、Redirectディテクティブのstatus引数にpermanentか301を指定するのと同じ動作になる。だから下記の3行は記述方法が違うだけで同じ内容の転送になる。
RedirectPermanent /hiromi http://www.example.com/shinichirou/
Redirect permanent /hiromi http://www.example.com/shinichirou/
Redirect 301 /hiromi http://www.example.com/shinichirou/
RedirectTempディレクティブ
基本的にはRedirectディレクティブと同じだが、RedirectTempディレクティブは転送する際のHTTPステータスコードが常に302へ固定されている。
RedirectTemp URL-path URL
つまり、Redirectディテクティブへstatus引数にtempか302を指定するのと同じ動作になる。だから下記の4行は記述方法が違うだけで同じ内容の転送になる。
RedirectTemp /noe http://www.example.com/shinichirou/
Redirect temp /noe http://www.example.com/shinichirou/
Redirect 302 /noe http://www.example.com/shinichirou/
Redirect /noe http://www.example.com/shinichirou/
RedirectMatchディレクティブ
RedirectMatchディレクティブはRedirectディレクティブと殆ど同じだが、転送元を指定する第二引数がregexになっている。
RedirectMatch (status) regex URL
regex引数でグループ化したものはURL引数で呼び出す事もできる。
#hiromi,noe,aiko,tomoyoへのアクセスを、shinichirouへ転送する
RedirectMatch /(hiromi|noe|aiko|tomoyo) http://www.example.com/shinichirou/
#gifファイルへのアクセスを、同名のjpgファイルへ転送する
RedirectMatch (.*)\.gif$ http://www.example.com$1.jpg
status引数
Redirectディレクティブのstatus引数と同じ。
regex引数
RedirectディレクティブのURL-path引数に相当する引数。転送元となるパスを正規表現を使って記述し、後方一致で検索される。
URL引数
RedirectディレクティブのURL引数と違って、regex引数でグループ化したものを呼び出す事ができる。
最後に
正規表現の説明については難しく、理解も深くないので割愛。.htaccessを使っての転送はRedirectディレクティブの他にmod_rewriteを使ってもできるが、正規表現同様に割愛。
今回の記事を書くにあたりmod_alias - Apache HTTP サーバの内容を参考にしました。
コメント[0]
コメント投稿フォーム
コメントを投稿するにはJavaScirptが必要です。ブラウザのJavaScriptを有効にしてください。
トラックバック[0]
トラックバックはまだありません。
コメントはまだありません。