<a id="rewrites"></a>

# Поддержка переписывания (rewrites)

ANIC позволяет преобразовывать (переписывать) URI запроса перед отправкой в приложение.
Например, путь запроса `/tea/green` может быть перезаписан как `/green`.
Для настройки изменения URI необходимо использовать `ActionProxy`
в `VirtualServer` или `VirtualServerRoute`.

## Пример с префиксом в пути

В следующем примере нагрузка между двумя приложениями, требующими изменения URI,
балансируется с помощью префиксного сопоставления:

```yaml
apiVersion: k8s.angie.software/v1
kind: VirtualServer
metadata:
  name: cafe
spec:
  host: cafe.example.com
  upstreams:
  - name: tea
    service: tea-svc
    port: 80
  - name: coffee
    service: coffee-svc
    port: 80
  routes:
  - path: /tea/
    action:
      proxy:
        upstream: tea
        rewritePath: /
  - path: /coffee
    action:
      proxy:
        upstream: coffee
        rewritePath: /beans
```

Изменения URI для `tea-svc` (обратите внимание,
что запросы к `/tea` перенаправляются на `/tea/` с добавлением косой черты в конце):

| Исходный URI   | Переписанный URI   |
|----------------|--------------------|
| `/tea/`        | `/`                |
| `/tea/abc`     | `/abc`             |

Изменения URI для `coffee-svc`:

| Исходный URI   | Переписанный URI   |
|----------------|--------------------|
| `/coffee`      | `/beans`           |
| `/coffee/`     | `/beans/`          |
| `/coffee/abc`  | `/beans/abc`       |

## Пример с регулярными выражениями

Если путь представляет собой регулярное выражение, а не префикс или точное соответствие,
`rewritePath` может содержать группы захвата `$1-9`.

Пример:

```yaml
apiVersion: k8s.angie.software/v1
kind: VirtualServer
metadata:
  name: cafe
spec:
  host: cafe.example.com
  upstreams:
  - name: tea
    service: tea-svc
    port: 80
  routes:
  - path: ~ /tea/?(.*)
    action:
      proxy:
        upstream: tea
        rewritePath: /$1
```

В этом примере группа захвата `(.*)` используется в `rewritePath` как `/$1`.
Это необходимо для передачи оставшейся части URI запроса (после `/tea`).

Примеры изменения URI для `tea-svc`:

| Исходный URI   | Переписанный URI   |
|----------------|--------------------|
| `/tea`         | `/`                |
| `/tea/`        | `/`                |
| `/tea/abc`     | `/abc`             |
