5.3.2 URLパターンの種類と適用されるパターンの優先順位
リダイレクタのURLマッピングで指定できるURLパターンの種類,および適用されるパターンの優先順位について説明します。
- 〈この項の構成〉
(1) URLパターンの種類
リダイレクタのURLマッピングには次の4種類のURLパターンを指定できます。
-
完全パス指定
完全に一致するパターンです。
- URLの形式:
-
/<パス>
ルートだけ指定する場合は,「/」。
- /<パス>に指定できる文字:
-
次の文字を使用した,1文字以上の文字列を指定します。
半角英数字,「/」,「*」,「-」,「.」,「_」,「~」,「!」,「$」,「&」,「'」,「(」,「)」,「+」,「,」,「=」,「:」,「@」
- 例:
-
URLパターンが"/examples/jsp/index.jsp"で,URLが"/examples/jsp/index.jsp"の場合,一致となります。
-
パス指定
パスが一致するパターンです。
- URLの形式:
-
/<パス>/*
すべてのリクエストを対象にする場合の形式は,「/*」。
- /<パス>に指定できる文字:
-
次の文字を使用した,1文字以上の文字列を指定します。
半角英数字,「/」,「*」,「-」,「.」,「_」,「~」,「!」,「$」,「&」,「'」,「(」,「)」,「+」,「,」,「=」,「:」,「@」
- 例:
-
URLパターンが"/examples/*"で,URLが"/examples/jsp/index.jsp"などの場合,一致となります。
-
拡張子指定
拡張子が一致するパターンです。指定されたパス以下のすべての階層に適用されます。
- URLの形式:
-
/<パス>/*.<拡張子>
すべてのパスを対象にする場合の形式は,「/*.<拡張子>」。
- <パス>,および<拡張子>に指定できる文字:
-
次の文字を使用した,1文字以上の文字列を指定します。
半角英数字,「/」,「*」,「-」,「.」,「_」,「~」,「!」,「$」,「&」,「'」,「(」,「)」,「+」,「,」,「=」,「:」,「@」
- 例:
-
URLパターンが"/examples/*.jsp"で,URLが"/examples/jsp/index.jsp"などの場合,一致となります。
-
サフィックス指定
サフィックスが一致するパターンです。指定されたパス以下のすべての階層に適用されます。
- URLの形式:
-
/<パス>/*<サフィックス>
すべてのパスを対象にする場合の形式は,「/*<サフィックス>」。
- <パス>,および<サフィックス>に指定できる文字:
-
次の文字を使用した,1文字以上の文字列を指定します。
半角英数字,「/」,「*」,「-」,「.」,「_」,「~」,「!」,「$」,「&」,「'」,「(」,「)」,「+」,「,」,「=」,「:」,「@」
- 例:
-
URLパターンが"/examples/servlet/*Servlet"で,URLが"/examples/servlet/HelloServlet"などの場合,一致となります。
- 注意事項
-
URLパターンの指定に関する注意事項を次に示します。
-
URLパターンの先頭に「/」以外を指定しないでください。URLパターンの先頭に「/」以外を指定した場合,WindowsではKDJE41012-Eが出力され,そのマッピングは無視されます。それ以外のOSでは,メッセージが出力されて,HTTP Serverの開始に失敗します。
-
「*」をワイルドカードとして使用する場合,URLパターンの「/*」より前には指定できません。URLパターン内で最初の「*」の直前の文字が「/」ではない場合,そのURLパターンは「完全パス指定」として扱われます。その場合,URL内に「/*」となる個所があっても,ワイルドカードとして扱われません。
-
同じURLパターンのマッピングを複数記述しないでください。複数記述した場合,次のような動作となります。
「完全パス指定」,および「パス指定」の場合,先に書いたURLパターンのマッピングが有効となります。「拡張子指定」,または「サフィックス指定」の場合は,あとに書いたものが有効となります。
-
<パス>,<拡張子>,<サフィックス>には,指定できる文字以外の文字を使用しないでください。指定できる文字以外の文字がURLパターンに含まれる場合,文字の種類によってはWebコンテナに転送されないことがあります。
-
<拡張子>または<サフィックス>の文字列の長さは1文字以上で指定してください。1文字以上でない場合,「拡張子指定」ではKDJE41041-Wが出力され,そのマッピングは無視されます。「サフィックス指定」では,「パス指定」のURLパターンとして扱われます。
-
(2) 適用されるURLパターンの優先順位
四つのURLパターンへのマッピングのうち,最優先されるURLパターンは,「完全パス指定」です。「完全パス指定」に一致しない場合,次に示す順序でパスの一致が判定され,適用されるURLパターンが決定します。
-
「完全パス指定」に一致しない場合
「パス指定」「拡張子指定」「サフィックス指定」のうち,最長一致のものが適用されます。最長一致とは,先頭(「/」)から「*」の上位パスまでができるだけ長いものに一致することを示します。
次のように二つのマッピングが定義されている場合を例に,説明します。
- マッピング定義:
-
/examples/* worker1
/examples/jsp/* worker2
この場合,URLが"/examples/jsp/index.jsp"の場合にはworker2のマッピングが適用され,URLが"/examples/test/index.jsp"の場合にはworker1のマッピングが適用されます。
-
1.の条件に加えて,最長一致する「パス指定」「拡張子指定」「サフィックス指定」が複数存在する場合
「パス指定」より,「拡張子指定」または「サフィックス指定」が優先されます。
次のように二つのマッピングが定義されている場合を例に,説明します。
- マッピング定義:
-
/examples/jsp/* worker1
/examples/jsp/*.jsp worker2
この場合,URLが"/examples/jsp/index.jsp"の場合にはworker2のマッピングが適用され,URLが"/examples/jsp/test.html"の場合にはworker1のマッピングが適用されます。
-
1.および2.の条件に加えて,最長一致する「拡張子指定」「サフィックス指定」が複数存在する場合
あとに指定したURLパターンが優先されます。
次のように二つのマッピングが定義されている場合を例に,説明します。
- マッピング定義:
-
/examples/*.jsp worker1
/examples/*jsp worker2
この順番に指定されていた場合,URLが"/examples/jsp/index.jsp"の場合にはworker2のマッピングが適用されます。
- 注意事項
-
適用されるパターンの優先順位の判定に関する注意事項を次に示します。
-
リクエストURLにクエリ(URLの「?」以降の文字列)がある場合,その部分はURLパターンとの比較には使用されません。
例:
リクエストURLが"/examples/jsp/index.jsp?query=foo"の場合,比較に使用されるURLは"/examples/jsp/index.jsp"となります。
-
リクエストURLにパスパラメタ(URLの「;」以降の文字列)がある場合,その部分はURLパターンとの比較には使用されません。
例:
リクエストURLが"/examples/jsp/index.jsp;jsessionid=0000"の場合,比較に使用されるURLは"/examples/jsp/index.jsp"となります。
-
リクエストURLはパスの正規化をしてから,URLパターンとの一致が判定されます。
例:
リクエストURLが"/examples/../examples/./jsp//index.jsp"の場合,比較に使用されるURLは"/examples/jsp/index.jsp"となります。
-
URLパターンの正規化はしません。そのため,「./」,「../」などを含むURLパターンを定義しても,リクエストと一致することはありません。
-
Windowsの場合,「拡張子指定」のURLパターンの拡張子について,大文字小文字は区別されないで判定されます。
-