45式::雑記
45式::雑記は、日々の事を記してないから日記ではなく雑記です。

.htaccessで転送する設定の書き方

コメント
0件
トラックバック
0件

.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に転送する場合。

.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引数permanent301を指定するのと同じ動作になる。だから下記の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引数temp302を指定するのと同じ動作になる。だから下記の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]

トラックバックはまだありません。

カテゴリ
アーカイブ
ヘルプ
Feed

フィードとは