6.7.3 実行環境での設定(J2EEサーバの設定)
ここでは,リダイレクトによるリクエストの振り分けの設定について説明します。
(1) 概要
インプロセスHTTPサーバでは,HTTPリクエストに含まれるURLパターンによってリクエストを振り分けることができます。また,振り分けたリクエストに対するレスポンスをカスタマイズして特定のファイルをクライアントに返すこともできます。リダイレクトするURLへのリクエストに対するレスポンスのステータスコードが300番台の場合,レスポンスボディを自動生成してクライアントにレスポンスを返します。また,指定したファイルをレスポンスボディとして使用することもできます。ファイルを指定する場合,レスポンスのContent-Typeヘッダもあわせて指定します。
自動生成されるレスポンスボディを次に示します。
<HTML><HEAD> <TITLE>ステータスコードおよび説明句</TITLE> </HEAD><BODY> <H1>ステータスコードおよび説明句</H1> </BODY></HTML>
レスポンスボディが自動生成されるステータスコードおよび説明句を次に示します。
-
300 Multiple Choices
-
301 Moved Permanently
-
302 Found
-
303 See Other
-
305 Use Proxy
-
307 Temporary Redirect
リクエスト処理時にレスポンスボディとして使用するファイルの読み込みに失敗した場合,ステータスコードに300番台が指定されていれば,レスポンスボディを自動生成してクライアントに返します。ステータスコードに200が指定されていれば,ステータス500エラーをクライアントに返します。
(2) 設定方法
リダイレクトによるリクエストの振り分けの定義は,簡易構築定義ファイルの論理J2EEサーバ(j2ee-server)の<configuration>タグ内に指定します。
簡易構築定義ファイルでのリダイレクトによるリクエストの振り分けの定義について次の表に示します。
指定するパラメタ |
設定内容 |
---|---|
webserver.connector.inprocess_http.redirect.list |
リダイレクト定義名を指定します。 |
webserver.connector.inprocess_http.redirect.<リダイレクト定義名>.request_url |
リダイレクトするリクエストのURLを「/」(スラッシュ)で始まる絶対パスで指定します。 |
webserver.connector.inprocess_http.redirect.<リダイレクト定義名>.redirect_url |
リクエストのリダイレクト先のURLを指定します。なお,ステータスコードに200を指定した場合は,URLを指定できません。 |
webserver.connector.inprocess_http.redirect.<リダイレクト定義名>.status |
リダイレクトを実行する場合のレスポンスのステータスコードを指定します。 |
webserver.connector.inprocess_http.redirect.<リダイレクト定義名>.file |
特定のファイルをレスポンスとしてクライアントに返す場合にレスポンスボディとして使用するファイルを指定します。なお,ステータスコードに200を指定した場合は,使用するファイルを指定する必要があります。 |
webserver.connector.inprocess_http.redirect.<リダイレクト定義名>.file.content_type |
特定のファイルをレスポンスとしてクライアントに返す場合にレスポンスボディとして使用するファイルのContent-Typeヘッダを指定します。 |
簡易構築定義ファイル,および指定するパラメタの詳細は,「第3編 リファレンス(V9互換モード)」を参照してください。
- 注意事項
-
-
HTTPレスポンスがHTMLファイルの場合,そのHTMLからほかのファイル(画像ファイルなど)を参照していると,正しくブラウザに表示されないことがあります。
-
リダイレクトURLの指定値がリクエストURLの指定値と一致する場合,クライアントによってはリダイレクトを実行し続けることがあります。
-
URLの書き換えによるセッション管理をしている場合,リクエストURLと同じWebアプリケーション内へのリダイレクトを実行してもセッションを引き継ぐことはできません。
-
(3) 設定例
リダイレクトによるリクエストの振り分けの設定例について説明します。
-
設定例1
リダイレクトによるリクエストの振り分けの設定例を次に示します。
: <param> <param-name>webserver.connector.inprocess_http.redirect.list</param-name> <param-value>REDIRECT_1,REDIRECT_2</param-value> </param> <param> <param-name>webserver.connector.inprocess_http.redirect.REDIRECT_1.request_url</param-name> <param-value>/index.html</param-value> </param> <param> <param-name>webserver.connector.inprocess_http.redirect.REDIRECT_1.redirect_url</param-name> <param-value>http://host1/new_dir/index.html</param-value> </param> <param> <param-name>webserver.connector.inprocess_http.redirect.REDIRECT_1.status</param-name> <param-value>302</param-value> </param> <param> <param-name>webserver.connector.inprocess_http.redirect.REDIRECT_2.request_url</param-name> <param-value>/old_dir/*</param-value> </param> <param> <param-name>webserver.connector.inprocess_http.redirect.REDIRECT_2.redirect_url</param-name> <param-value>http://host1/new_dir/</param-value> </param> <param> <param-name>webserver.connector.inprocess_http.redirect.REDIRECT_2.status</param-name> <param-value>301</param-value> </param> <param> <param-name>webserver.connector.inprocess_http.redirect.REDIRECT_2.file</param-name> <param-value>C:/data/301.html</param-value> </param> <param> <param-name>webserver.connector.inprocess_http.redirect.REDIRECT_2.file.content_type</param-name> <param-value>text/html; charset=ISO-8859-1</param-value> </param> :
この設定例では,リダイレクト定義名として,「REDIRECT_1」と「REDIRECT_2」を使用しています。「REDIRECT_1」では,「/index.html」へのリクエストを「http://host1/new_dir/index.html」にステータスコード「302」でリダイレクトします。「REDIRECT_2」では,「/old_dir/」以下へのリクエストを「http://host1/new_dir/」以下にステータス「301」でリダイレクトします。また,レスポンスボディとして「C:/data/301.html」を使用し,Content-Typeヘッダとして「text/html; charset=ISO-8859-1」を使用します。
-
設定例2
リクエストURLとしてワイルドカードを使用し,リダイレクトURLに「/」で終わる値を指定した場合,レスポンスのLocationヘッダに設定される値は,「リダイレクトURLに指定した値」+「実際のリクエストURLのワイルドカード以降のパス」になります。
: <param> <param-name>webserver.connector.inprocess_http.redirect.list</param-name> <param-value>REDIRECT_3</param-value> </param> <param> <param-name>webserver.connector.inprocess_http.redirect.REDIRECT_3.request_url</param-name> <param-value>/dir1/*</param-value> </param> <param> <param-name>webserver.connector.inprocess_http.redirect.REDIRECT_3.redirect_url</param-name> <param-value>http://host/dir2/</param-value> </param> :
この設定例の場合,実際のリクエストURLが「/dir1/subdir1/index.html」のときには,Locationヘッダには「http://host/dir2/subdir1/index.html」が設定されます。なお,リクエストURLの指定でワイルドカードを使用した場合でも,リダイレクトURLが「/」で終わらないときは,Locationヘッダの値は,リダイレクトURLと同じ値になります。
リダイレクトが行われる際,実際のリクエストURLにクエリ文字列が付加されていた場合,Locationヘッダに設定される値は,リダイレクトURLの指定値にクエリ文字列を付加した値となります。また,リダイレクトURLにはクエリ文字列の付いた値を指定できます。この場合,実際のリクエストURLにもクエリ文字列が付いているときは,Locationヘッダに設定される値は,リダイレクトURLの指定値の後ろにリクエストのクエリ文字列が付加された値となります。