URL Rewrite 2.0 betaでDestinationヘッダーの書き換え

URL Rewrite Module 2.0 では、サーバー変数という形で、HTTPヘッダーの参照/変更が可能なようです。

Destinationヘッダーの書き換えによるsvn copyへの対応がしたかったんですが、
mod_headers の RequestHeader ディレクティブのようなヘッダー値の一部置換(edit)が不可能なので、かなり力業で対応してみました。

想定する状況

設定

subversion用のサイトにURL Rewrite Ruleを追加し、以下のように設定。
(URLのRewrite部分は割愛)

Match URL
  1. "Using" で "Regular Expression" を指定
Conditions
  1. "Logical Grouping" を、"Match Any" に変更
  2. 以下の2件を追加
Input Type Pattern
{HTTP_DESTINATION} Matches the pattern https://example.com(.*)
{HTTP_HOST} Matches the pattern (.*)

{HTTP_DESTINATION} は、Destinationヘッダーをサーバー変数として参照するための記述です。Actionsで置換しない部分をグループ化しています。
また、Destinationヘッダーが存在しないリクエストを通すために、Match Anyにした上で、無条件で通すための{HTTP_HOST}を入れています。

{HTTP_HOST}のホスト名を明示的に指定することも出来ますが、IPを別にしている場合、ホスト名とIPを併記しないとこけます。*1
また、{HTTP_HOST}のパターンの括弧を外すとエラーになります。

Actions
  1. Server Variables...で、以下を設定
Name Value Replace
HTTP_DESTINATION http://192.168.0.1{C:1} On

サーバー変数を上書きすることで、HTTPヘッダーの内容を上書き出来るようです。
{C:1}は、Conditionsでグループ化したDestinationヘッダーのホスト名以下の部分です。

まとめ

要らないDestinationヘッダーが付与されてると思うので、ここまでして対応するなら、VirtualSVNにmod_headers入れて、そっちで対応した方が良さそう(出来るかどうかは未調査)

RequestHeaderのように、サーバー変数を直接置換できるようにしてくれないかなぁ…。

*1:e.g. (example.com|192.168.0.2)