Logo address

URI 変換 (2)

目次

配置

	$web/etc/rewrite

説明

このファイルは /sys/lib/httpd.rewrite と共に Pegasus にアクセスするクライアントからのリクエストに対して正しい URI を知らせるために使用されます。

URI 変換は2つの段階で行われます。まず最初に /sys/lib/httpd.rewrite によって(このファイルはサーバ管理者によって管理されます)、その次に $web/etc/rewrite によって(このファイルはドキュメントの管理者によって管理されます) URI が変換され、その内容がクライアントに伝えられます。($web は web ルートです。)

$web/etc/rewrite の変換規則は次の通りです。

第1フィールドはドキュメントルートからのパスを指定します。従って

第2フィールドはリダイレクションの先が指定されます。従って 第2フィールドの * 修飾子が使用できません。第2フィールドで指定できるリダイレクションの形式は、以下の2つのうちのいずれかです。
ここに [ ] は省略可能であることを表すメタ記号で、
第2フィールドが / で始まる場合には、第1フィールドにマッチすることによって受け入れられた scheme://host[:port] が省略されたと見なされます)。
マッチしたパスはパターンと一致した部分が第2フィールドで置き換えられます。(パスのマッチング規則に関しては パス名適合規則を参照して下さい。)

次の制約を守ってください。

パス名のマッチング

httpd.rewrite で使用されているパス名の適合規則は単なる部分文字列を見ているわれではありません。ディレクトリの区切りをみています。

リダイレクションループ

/sys/lib/httpd.rewrite のケーススタディの中に現れた次の例について考えてみましょう。
/private		https://pegasus.goodwill.com/private
bob がこのように書く気持ちは、 http を使用したリクエストを秘密性を要するデータに適用するのを嫌い、この処理を暗号通信を使用する https を使って行うようにクライアントに指示しているのです。しかしこれを機械的にリダイレクションすると、https://pegasus.goodwill.com/private でアクセスしたクライアントはリダイレクションの無限ループに陥ります!
bob の気持ちを尊重するとすれば(尊重しなくてはなりません。なぜなら誰でもこのように書きたくなるでしょう。) この場合にはサーバはリダイレクションしてはなりません。単に受け入れるべきです。Pegasus はそのように設計されています。
リダイレクションループの表現は $web/etc/rewrite でのみ許され /sys/lib/httpd.rewrite では許されません。また単純形(1つの行だけでループに陥る表現)だけが許されます。