名前
RewriteRule
形式
RewriteRule URLパターン 置換文字列 [フラグ]
機能概要
URLを書き換えるためのルールを設定します。
RewtiteCondディレクティブなどのリライト関連のディレクティブと組み合わせて、柔軟にURLを書き換えることができます。
書換え対象のURLを正規表現で指定します。
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_httpモジュールを設定する必要があります。
last(または、L)
ルールにマッチしている場合は、URLの書換え処理を終了します。後続のルールは適用されません。
next(または、N)
一連の書換え処理のルールを先頭のルールから再度実行します。すでに書き換えられたURLが対象となります。本フラグを指定する場合は、書換え処理が無限に実行されないように、適切に終了条件を設定してください。
chain(または、C)
ルールにマッチしている場合は、後続のルールを適用します。ルールにマッチしていない場合、後続のルールはすべて適用されません。
type=MIMEタイプ(または、T=MIMEタイプ)
ルールにマッチしている場合は、指定したMIMEタイプをContent-Typeヘッダに設定します。
注意
Servletサービスのアプリケーションにアクセスし、そのアプリケーションにおいてMIMEタイプが設定された場合、本指定は無効となります。
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」)の場合に有効となります。
バーチャルホストで本ディレクティブを設定する場合は、バーチャルホストごとに設定してください。
バーチャルホストで本ディレクティブを設定すると、書き換えるURLのホスト名と<VirtualHost>セクションに指定したアドレスの文字列が一致した場合、内部リダイレクトします。外部リダイレクトするように設定するには、フラグに「redirect[=ステータス](または、R[=ステータス])」を指定してください。
置換文字列に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サーバ