1

ワニスの URL から値を取り除きたいので、URL に基づいてさまざまなアクションを実行できます。たとえば、次のようになります。

URL: /product/123/price/available.

これを /products?id=123&sort=price&available=true に変換したい

また、(可能であれば) リクエスト ヘッダーに値を設定できるようにしたいので、URL にすべてのパラメーターを渡す代わりに、次のようにすることもできます。

/products?id=123&sort=価格

  • ヘッダー付き: x-show-available-only: true

2 番目の例は少し奇妙に見えますが、この方法で新しいパラメーターをレガシー アプリケーションに戻すことができ、新しいパラメーターが現在のパラメーターに干渉しないようにすることができます。すべてを移行するまで、ヘッダーを介して新しいパラメーターを読み取るだけです。私たちの機能を新しいプラットフォームに。

それは正規表現だと確信していますが、それを行う方法がわかりません。

4

1 に答える 1

3

これはテストされていませんが、正しく調整できるほど十分に近いはずです。

URL に基づく:

/product/123/price/available

2 つのバックエンドを指定する必要があります (独自の IP に変更してください)。

backend old_app {
    .host = "127.0.0.1";
    .port = "80";
}

backend new_app {
    .host = "127.0.0.2";
    .port = "80";
}

そして、あなたの vcl_recv のコード:

if (req.url ~ "^/product/") {
    set req.url = regsub(req.url, "/product/([0-9]/)/([a-zA-Z])", "/products?id=\1&sort=\2");
    set req.backend = old_app;
} else {
    set req.backend = new_app.
}

if (req.url ~ "/available") {
    set req.http.x-show-available-only = "true";
}

if/else ブロックのように正規表現ルールを追加できます。

幸運を!

于 2013-03-03T20:54:34.747 に答える