ページの先頭行へ戻る
Interstage Application Server/Interstage Web Server Interstage HTTP Server 運用ガイド

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


注意事項

使用例

  クライアント(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

注)各ホスト名は、以下を意味します。