ディレクトリ単位のリライト用のベースURLを明示的に設定します。リライト・ルールを ディレクトリ単位の構成(.htaccess)ファイルで使用できます。新規URLの置換が発生 する場合は、サーバー処理にベースURLを追加する必要があります。これを可能にするに は、対応するURL接頭辞またはURLベースをモジュールで認識する必要があります。デ フォルトでは、この接頭辞自体が対応するファイル・パスです。ただし、ほとんどのWeb サイトでは、URLは物理ファイル名のパスに直接関連付けられていません。このような場合 は、RewriteBaseディレクティブを使用して正しいURL接頭辞を指定する必要がありま す。
WebサーバーのURLが物理ファイルのパスに直接関連付けられていない場合は、
RewriteRuleディレクティブを使用する各.htaccessファイル内でRewriteBaseを使 用する必要があります。
例 例例
例 8-12 RewriteBaseディレクティブディレクティブディレクティブディレクティブ
次のディレクトリ単位の構成ファイルがあるとします。
## /abc/def/.htaccess - - per-dir config file for directory /abc/def # /abc/def is the physical path of /xyz,
RewriteEngine On RewriteBase /xyz
RewriteRule ^oldstuff¥.html$ newstuff.html
例8-12では、/xyz/oldstuff.htmlのリクエストは物理ファイル /abc/def/newstff.htmlに正確にリライトされます。
mod_rewrite
Oracle HTTP Serverのモジュール 8-79
リライト・ルールのヒント リライト・ルールのヒント リライト・ルールのヒント リライト・ルールのヒント
表8-6に、リライト・ルールを使用するためのヒントを示します。
たとえば、/demo1、/demo2および/demo3からのリクエストを/alldemosにリダイレ クトするには、リライト・ルールを次のどちらかとして記述します。
RewriteRule /demo. /alldemos [R]
または
RewriteRule /demo [123] /alldemos [R]
/DemoA、/DemoBおよび/DemoCを/alldemosにリダイレクトする場合は、次のように、
前述のリライト・ルールにNC(no case)を追加します。
RewriteRule /demo [123] /alldemos [R, NC]
"."は1文字のみを処理するため、このリライト・ルールは/demonstration1から
/demosへのリダイレクトには機能しません。"demo"で始まるURLすべてを後続の文字に 関係なくリダイレクト可能にするには、次のリライト・ルールを使用します。
RewriteRule ^/demo* /alldemos [R, NC]
前述の例では、^は始まりを意味し、*はdemoの後の任意の文字を意味します。
/demo1/not_just_index.htmlに対してリクエストがある場合、前述のリライト・ルー ルでは/alldemos/index.htmlへのリクエストにリライトされますが、これは意図した 結果でない場合があります。表8-7に示すように、/alldemos内の対応するファイルにリ ダイレクトする必要があります。
表 表表
表 8-6 リライト・ルールのヒントリライト・ルールのヒントリライト・ルールのヒントリライト・ルールのヒント 値値値
値 定義定義定義定義
. 任意の1文字
[char] 大カッコで囲まれた任意の文字
b* 任意の数の文字bからなる文字列 .* 任意の数の任意の文字からなる文字列
mod_rewrite
次のように、リライト・ルールに置換を使用する必要があります。
RewriteRule ^/demos1(.*)$ //alldemos/$1 [R NC]
このルールの内容は、次のとおりです。
happy.html、go.jpgおよびlucky.jpgなど、demo1の後に指定されている式の値が変 数($1)として使用され、/alldemos/の後で置換されます。
リダイレクションの例 リダイレクションの例 リダイレクションの例 リダイレクションの例
リクエストをDocumentRootからnewrootディレクトリにリダイレクトする場合は、次 のmod_rewriteディレクティブを設定します。
RewriteEngine On
RewriteRule ^/(.*)$ /newroot/$1 [R]
あるディレクトリ(olddir)から別のディレクトリ(newdir)にファイル・リクエストを 送信する場合は、次のディレクティブを設定します。
RewriteEngine On
RewriteRule ^/olddir(.*)$ /newdir/$1 [R]
どちらの場合も、リクエストされたリソースがリダイレクト先で実際に使用可能かどうかを 確認する必要があります。mod_rewriteモジュールは、リクエストされたリソースが新し い場所にあるかどうかを確認しません。
HTTPTRACEメソッドを使用してリクエストをすべて無効にする場合は、次のmod_
rewriteディレクティブを設定します。
RewriteEngine On 表
表表
表 8-7 リクエストのリダイレクトリクエストのリダイレクトリクエストのリダイレクトリクエストのリダイレクト リクエストの内容
リクエストの内容リクエストの内容
リクエストの内容 リダイレクト先リダイレクト先リダイレクト先リダイレクト先
/demo1/happy.html /alldemos/happy.html /demo1/go.jpg /alldemos/go.jpg /demos1/lucky.jpg /alldemos/lucky.jpg
関連項目 関連項目関連項目
関連項目: Apache Serverマニュアルの「Module mod_rewrite」
mod_userdir
Oracle HTTP Serverのモジュール 8-81