第4章 運用・保守
A.83 RewriteRule
名前
RewriteRule
形式
RewriteRule URLパターン置換文字列 [フラグ]
機能概要
URLを書き換えるためのルールを設定します。
RewtiteCondディレクティブなどのリライト関連のディレクティブと組み合わせて、柔軟にURLを書き換えることができます。
URLパターン
書き換えの対象となるURLを正規表現で指定します。
置換文字列
URLパターンにマッチした場合に、書き換えるURLを指定します。
以下の変数を指定することもできます。
- $N
Nには、1から9までの数値を指定します。
URLパターンに指定した正規表現のグループ化“括弧()”に対応した文字列に置き換えられます。
- %N
Nには、1から9までの数値を指定します。
最後に条件を満たしたRewtiteCondディレクティブの条件パターンに指定した正規表現のグループ化“括弧()”に対応した文 字列に置き換えられます。
- %{サーバ変数名}
サーバ変数を指定します。サーバ変数については、“付録B 環境変数とサーバ変数”を参照してください。
- %{ENV:環境変数名}
環境変数を指定します。環境変数については、“付録B 環境変数とサーバ変数”を参照してください。
- %{HTTP:ヘッダ名}
任意のHTTPリクエストヘッダを指定します。
-
URLを書き換えません。
フラグ(省略可)
フラグを、角括弧([])で囲んで指定します。複数のフラグを指定する場合は、角括弧([])内にカンマ(,)で区切って指定してくださ い。
指定可能なフラグを以下に示します。
- redirect[=ステータス](または、R[=ステータス])
書き換えたURLで外部リダイレクトを実行します。
指定可能なステータスを以下に示します。[=ステータス]を省略した場合は、ステータスコード“302” (Moved Temporarily)で リダイレクトします。
- permanent(または、301)
ステータスコード“301”(Moved Permanently)でリダイレクトします。
- temp(または、302)
ステータスコード“302”(Moved Temporarily)でリダイレクトします。
- seeother(または、303)
ステータスコード“303”(See Other)でリダイレクトします。
- forbidden(または、F)
ステータスコード“403”(Forbidden)を返します。
RewtiteCondディレクティブに設定した条件で、Webサーバへのアクセスを禁止する場合などに指定します。
- gone(または、G)
ステータスコード“410”(Gone)を返します。
クライアントに、存在しないページにアクセスしていることを通知する場合に指定します。
- proxy(または、P)
ルールにマッチしている場合は、書き換えたURLをプロキシ要求とみなし、リバースプロキシとして動作します。
本フラグを指定する場合は、LoadModuleディレクティブでmod_proxy、mod_proxy_connect、およびmod_proxy_httpモジュー ルを設定する必要があります。
- last(または、L)
ルールにマッチしている場合は、URLの書き換え処理を終了します。後続のルールは適用されません。
- next(または、N)
一連の書き換え処理のルールを先頭のルールから再度実行します。すでに書き換えられたURLが対象となります。本フラグ を指定する場合は、書き換え処理が無限に実行されないように、適切に終了条件を設定してください。
- chain(または、C)
ルールにマッチしている場合は、後続のルールを適用します。ルールにマッチしていない場合、後続のルールはすべて適用 されません。
- type=MIMEタイプ(または、T=MIMEタイプ)
ルールにマッチしている場合は、指定したMIMEタイプをContent-Typeヘッダに設定します。
- nosubreq(または、NS)
Webサーバ内で発生するサブリクエストには、ルールを適用しません。
クライアント(Webブラウザ)から末尾がスラッシュ(/)のURLが指定された際に、DirectoryIndexディレクティブで指定したファイ ルに対するサブリクエストが発生しますが、そのサブリクエストはルールを適用しない場合などに使用します。
- nocase(または、NC)
大文字小文字を区別せずにルールを適用します。
- qsappend(または、QSA)
書き換え前のURLおよび置換文字列にそれぞれクエリ文字列(URL内のクエスチョンマーク(?)以降の文字列)が存在する場 合、置換文字列の末尾にアンパサンド(&)と書き換え前のURLに指定されたクエリ文字列を追加します。本フラグを指定しない 場合、クエリ文字列は置換文字列で上書きされます。
- noescape(または、NE)
書き換え時のURLエスケープを抑制します。
通常、パーセント(%)やセミコロン(;)などの特殊文字は、16進表現の“%25”、“%3b”にエスケープされますが、本フラグを指定 した場合は、エスケープされません。
- passthrough(または、PT)
URLの書き換え後、他のモジュールに制御を渡します。
書き換えたURLに対して、Aliasディレクティブ、ScriptAliasディレクティブ、およびRedirectディレクティブなどを使用する場合 に指定します。
- skip=数値(または、S=数値)
ルールにマッチしている場合、数値に指定した数の後続のルールの適用をスキップします。
- env=環境変数:値(または、E=環境変数:値)
ルールにマッチしている場合、指定した任意の環境変数に値を設定します。値には、置換文字列と同様に、$Nおよび%Nも 指定できます。$Nおよび%Nの指定方法については、置換文字列の説明を参照してください。
指定位置
グローバルコンテキスト、バーチャルホスト、ディレクトリ
省略値
なしモジュール
mod_rewrite注意事項
・ 本ディレクティブは、リライト機能を使用する設定である(RewriteEngineディレクティブに“On”を設定している)場合に有効となりま す。
・ バーチャルホストで本ディレクティブを設定する場合は、バーチャルホストごとに設定してください。
・ 置換文字列にServletサービスのアプリケーションのURLを指定する場合は、外部リダイレクトの指定だけが有効となります。
使用例
クライアント(Webブラウザ)からリクエストを受信した場合に、本ディレクティブに設定した各ルールに従って書き換えられたURLを以 下の表に示します。
設定内容 クライアントからのリクエス ト
置換後のURL(注)
RewriteRule ^/somepath(.*) /otherpath$1 GET /somepath/pathinfo /otherpath/pathinfo
(内部リダイレクト)
RewriteRule ^/somepath(.*) /otherpath$1 [R] GET /somepath/pathinfo http://thishost/otherpath/pathinfo (外部リダイレクト)
RewriteRule ^/somepath(.*) http://thishost/otherpath$1 GET /somepath/pathinfo /otherpath/pathinfo (内部リダイレクト) RewriteRule ^/somepath(.*) http://thishost/otherpath$1
[R]
GET /somepath/pathinfo http://thishost/otherpath/pathinfo (外部リダイレクト)
RewriteRule ^/somepath(.*) http://otherhost/otherpath
$1
GET /somepath/pathinfo http://otherhost/otherpath/pathinfo (外部リダイレクト)
RewriteRule ^/somepath(.*) http://originhost/otherpath
$1 [P]
GET /somepath/pathinfo http://originhost/otherpath/pathinfo (リバースプロキシ)
RewriteRule ^/(.+\.cgi)$ /cgi-bin/$1 [PT] GET /test.cgi?abc /cgi-bin/test.cgi?abc
RewriteRule ^/(.+\.cgi)$ /cgi-bin/$1 [PT,QSA] GET /test.cgi?abc /cgi-bin/test.cgi?abc RewriteRule ^/(.+\.cgi)$ /cgi-bin/$1?xyz [PT] GET /test.cgi?abc /cgi-bin/test.cgi?xyz RewriteRule ^/(.+\.cgi)$ /cgi-bin/$1?xyz [PT,QSA] GET /test.cgi?abc /cgi-bin/test.cgi?xyz&abc 注)各ホスト名は、以下を意味します。
・ thishost:ルールが設定されているWebサーバ
・ otherhost:他のWebサーバ
・ originhost:プロキシ動作時のコンテンツ生成元のWebサーバ