Перейти к содержимому

Rewrites

Rewrites отдают контент по другому пути или с другого сервера, не меняя URL в адресной строке браузера. В отличие от редиректов, пользователь не видит изменения адреса.

ТипОписаниеПример
ВнутреннийОтдаёт файл по другому пути в рамках проекта/app/index.html
Внешний (прокси)Проксирует запрос на внешний сервер/api/*https://api.example.com/:splat
  1. Откройте проект → SettingsRouting Rules

  2. Выберите окружение в правом верхнем углу

  3. Перейдите на вкладку Rewrites

  4. Нажмите Добавить rewrite

  5. Заполните поля:

    • Исходный путь — входящий URL (например, /api/*)
    • Путь назначения — куда проксировать
    • Внешний — включите для проксирования на внешний сервер
  6. Выберите окружения и нажмите Добавить

Внутренние rewrites отдают файлы вашего проекта по другим путям. Это полезно для SPA (Single Page Applications) и “чистых” URL.

Для SPA-приложений все маршруты должны вести на index.html:

/* → /index.html
ЗапросРезультат
/dashboardОтдаётся /index.html
/user/123Отдаётся /index.html
/settingsОтдаётся /index.html
/blog/:slug → /blog/:slug.html
ЗапросРезультат
/blog/helloОтдаётся /blog/hello.html
/blog/worldОтдаётся /blog/world.html

Внешние rewrites проксируют запросы на другой сервер. URL в браузере не меняется, но контент приходит с внешнего источника.

/api/* → https://api.example.com/:splat (внешний)
ЗапросПроксируется на
/api/usershttps://api.example.com/users
/api/products/123https://api.example.com/products/123

При создании внешнего rewrite можно добавить заголовки, которые будут отправляться на внешний сервер:

{
"X-API-Key": "your-secret-key",
"Authorization": "Bearer token"
}

Эти заголовки не видны клиенту — они добавляются только к запросу на внешний сервер.

/old/* → /new/:splat
ЗапросРезультат
/old/page/new/page
/old/a/b/c/new/a/b/c
/user/:id/profile → /profiles/:id
ЗапросРезультат
/user/123/profile/profiles/123
/v1/:resource/* → https://api.example.com/v2/:resource/:splat
ЗапросПроксируется на
/v1/users/123https://api.example.com/v2/users/123
/v1/products/listhttps://api.example.com/v2/products/list

Как и редиректы, rewrites по умолчанию не применяются, если файл существует.

Правило: /page → /index.html
Файл /page.html существует?
├─ Да → Отдаётся /page.html
└─ Нет → Отдаётся /index.html

ONREZA применяет защиту от SSRF-атак (Server-Side Request Forgery):

  • Блокируются запросы к приватным IP-адресам (10.x.x.x, 192.168.x.x, 127.0.0.1)
  • Блокируются запросы к внутренним сервисам
  • Разрешены только HTTP и HTTPS протоколы

Rewrites проверяются после редиректов. Если для URL сработал редирект, rewrite не применяется.

Запрос → Проверка редиректов → Проверка rewrites → Отдача контента
/api/* → https://api.example.com/:splat

Все API-запросы проксируются на отдельный сервер.

/app1/* → https://app1.example.com/:splat
/app2/* → https://app2.example.com/:splat

Разные части приложения на разных серверах.

/landing → https://variant-b.example.com/landing

Показ альтернативной версии страницы.

/api/v1/* → https://old-api.example.com/:splat
/api/v2/* → https://new-api.example.com/:splat

Постепенная миграция между версиями API.

/functions/* → https://functions.example.com/:splat

Проксирование на платформу serverless-функций.

Если rewrite не работает:

  1. Проверьте порядок правил — редиректы имеют приоритет над rewrites
  2. Проверьте тип rewrite — для внешнего URL должен быть включён флаг “Внешний”
  3. Проверьте URL назначения — для внешних rewrites требуется полный URL с протоколом
  4. Проверьте доступность — внешний сервер должен быть доступен

Проверьте конфигурацию в Project → Settings → Routing Rules.

ПараметрЛимит
Правил на окружение1000
Длина паттерна пути500 символов
Длина URL назначения2000 символов
Proxy headers на правило50