Sun Java System Web Server 7.0 は、正規表現 (パターンとも呼ばれる) と、要求時にパラメータを構成ファイルに挿入する機能をサポートするように拡張されています。さらに、ワイルドカードパターンマッチングのサポートが、server.xml にまで拡張されています。URL リダイレクションは SAF として実装されています。リダイレクト SAF を使えば、ある特定のプレフィックスに一致する URI をリダイレクトできます。プレフィックスは from パラメータを使って、リダイレクト先の URL は url または url-prefix パラメータを使って、それぞれ指定できます。Sun Java System Web Server 7.0 では、from パラメータは省略可能です。from を省略すると、すべての URI がリダイレクトされます。
obj.conf ファイル内の SAF パラメータでは、新しいタグ <If>、<Elseif>、および <Else> がサポートされています。付録 - obj.conf - 構文と使用法を参照してください。これらのタグには指令が含まれます。これらのタグを使えば、指令の実行条件を定義できます。また、これらのタグは、SAF パラメータを動的に生成するために使用することもできます。
Sun Java System Web Server 7.0 が提供する URL 書き換え機能は、Apache HTTP サーバーの mod_rewrite モジュールのスーパーセットになっています。<If> タグは Apache の mod_rewrite 機能とは異なり、次の機能を提供します。
URI、パス、ヘッダーフィールド、および応答本文を操作できる。
要求処理のどの段階でも機能する。
他社製プラグインを含む任意の SAF と連携できる。
次のような指令があるとします。
NameTrans fn="redirect" from="/site1" url="http://site1.mycompany.com" |
この指令は、正規表現を使って次のように書き換えられます。
<If $uri =~ '^/site1'> NameTrans fn="redirect" url="http://site1.mycompany.com" </If> |
このコードでは、from パラメータの代わりに正規表現が使用されています。/site1/* に対するすべての要求を、http://site1.mycompany.com/*/index.html にリダイレクトする必要がある場合には、次のテクニックを検討してください。
<If $uri =~ '^/site1/(.*)'> NameTrans fn="redirect" url="http://site1.mycompany.com/$1/index.html" </If> |
この場合、<If> タグによって、(.*) に一致する値が何であれ、その値が変数 $1 に代入されます。url パラメータの $1 は、元の要求からの値で動的に置換されます。つまり、上記の obj.conf コードによって、/site1/download に対する要求が http://site1.mycompany.com.com/download/index.html にリダイレクトされます。
<If> と redirect の組み合わせれば、mod_rewrite の柔軟性の一部を実現できます。ただし、<If> は mod_rewrite とは異なり、URL のリダイレクションや書き換え以外の用途にも使用できます。<If> は、他社製プラグインを含む任意の SAF と組み合わせて使用することもできます。
上記の方法では、302 一時的に移動リダイレクトが構成されます。Sun Java System Web Server 7.0 では、status="301" パラメータを追加することで、301 永久に移動リダイレクトを代わりに必要としていることを示すこともできます。
NameTrans fn="redirect" from="/path" url="http://server.example.com" status="301" |