$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フィールドはドキュメントルートからのパスを指定します。従って
/ から始まります。/~alice のようにユーザを指定できません。* 修飾子が使用できません。第2フィールドで指定できるリダイレクションの形式は、以下の2つのうちのいずれかです。scheme://hostdom[:port][/path][;params][?query]/path[;params][?query][ ] は省略可能であることを表すメタ記号で、scheme :: 任意のスキームhostdom :: ホストの完全名 (pegasus.goodwill.com など)port :: ポート番号path :: ドキュメントへのパスparams :: CGI に渡す引数リストquery :: query 文字列/ で始まる場合には、第1フィールドにマッチすることによって受け入れられた scheme://host[:port] が省略されたと見なされます)。
次の制約を守ってください。
scheme と host は小文字で書いてくださいport は 80 と 443 については省いてください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つの行だけでループに陥る表現)だけが許されます。