Rewrites
Rewrites отдают контент по другому пути или с другого сервера, не меняя URL в адресной строке браузера. В отличие от редиректов, пользователь не видит изменения адреса.
Типы rewrites
Заголовок раздела «Типы rewrites»| Тип | Описание | Пример |
|---|---|---|
| Внутренний | Отдаёт файл по другому пути в рамках проекта | /app → /index.html |
| Внешний (прокси) | Проксирует запрос на внешний сервер | /api/* → https://api.example.com/:splat |
Создание rewrite
Заголовок раздела «Создание rewrite»-
Откройте проект → Settings → Routing Rules
-
Выберите окружение в правом верхнем углу
-
Перейдите на вкладку Rewrites
-
Нажмите Добавить rewrite
-
Заполните поля:
- Исходный путь — входящий URL (например,
/api/*) - Путь назначения — куда проксировать
- Внешний — включите для проксирования на внешний сервер
- Исходный путь — входящий URL (например,
-
Выберите окружения и нажмите Добавить
Внутренние rewrites
Заголовок раздела «Внутренние rewrites»Внутренние rewrites отдают файлы вашего проекта по другим путям. Это полезно для SPA (Single Page Applications) и “чистых” URL.
SPA fallback
Заголовок раздела «SPA fallback»Для SPA-приложений все маршруты должны вести на index.html:
/* → /index.html| Запрос | Результат |
|---|---|
/dashboard | Отдаётся /index.html |
/user/123 | Отдаётся /index.html |
/settings | Отдаётся /index.html |
Чистые URL
Заголовок раздела «Чистые URL»/blog/:slug → /blog/:slug.html| Запрос | Результат |
|---|---|
/blog/hello | Отдаётся /blog/hello.html |
/blog/world | Отдаётся /blog/world.html |
Внешние rewrites (прокси)
Заголовок раздела «Внешние rewrites (прокси)»Внешние rewrites проксируют запросы на другой сервер. URL в браузере не меняется, но контент приходит с внешнего источника.
Прокси API
Заголовок раздела «Прокси API»/api/* → https://api.example.com/:splat (внешний)| Запрос | Проксируется на |
|---|---|
/api/users | https://api.example.com/users |
/api/products/123 | https://api.example.com/products/123 |
Прокси с дополнительными заголовками
Заголовок раздела «Прокси с дополнительными заголовками»При создании внешнего rewrite можно добавить заголовки, которые будут отправляться на внешний сервер:
{ "X-API-Key": "your-secret-key", "Authorization": "Bearer token"}Эти заголовки не видны клиенту — они добавляются только к запросу на внешний сервер.
Паттерны путей
Заголовок раздела «Паттерны путей»Wildcard
Заголовок раздела «Wildcard»/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/123 | https://api.example.com/v2/users/123 |
/v1/products/list | https://api.example.com/v2/products/list |
Опция Force
Заголовок раздела «Опция Force»Как и редиректы, rewrites по умолчанию не применяются, если файл существует.
Правило: /page → /index.html
Файл /page.html существует?├─ Да → Отдаётся /page.html└─ Нет → Отдаётся /index.htmlПравило: /page → /index.html (force)
Всегда отдаётся /index.htmlБезопасность внешних rewrites
Заголовок раздела «Безопасность внешних rewrites»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 Gateway
Заголовок раздела «API Gateway»/api/* → https://api.example.com/:splatВсе API-запросы проксируются на отдельный сервер.
Микрофронтенды
Заголовок раздела «Микрофронтенды»/app1/* → https://app1.example.com/:splat/app2/* → https://app2.example.com/:splatРазные части приложения на разных серверах.
A/B тестирование
Заголовок раздела «A/B тестирование»/landing → https://variant-b.example.com/landingПоказ альтернативной версии страницы.
Legacy API
Заголовок раздела «Legacy API»/api/v1/* → https://old-api.example.com/:splat/api/v2/* → https://new-api.example.com/:splatПостепенная миграция между версиями API.
Serverless functions
Заголовок раздела «Serverless functions»/functions/* → https://functions.example.com/:splatПроксирование на платформу serverless-функций.
Отладка
Заголовок раздела «Отладка»Если rewrite не работает:
- Проверьте порядок правил — редиректы имеют приоритет над rewrites
- Проверьте тип rewrite — для внешнего URL должен быть включён флаг “Внешний”
- Проверьте URL назначения — для внешних rewrites требуется полный URL с протоколом
- Проверьте доступность — внешний сервер должен быть доступен
Проверьте конфигурацию в Project → Settings → Routing Rules.
| Параметр | Лимит |
|---|---|
| Правил на окружение | 1000 |
| Длина паттерна пути | 500 символов |
| Длина URL назначения | 2000 символов |
| Proxy headers на правило | 50 |
См. также
Заголовок раздела «См. также»- Обзор правил роутинга — общая информация
- Редиректы — HTTP перенаправления
- Заголовки — кастомные HTTP-заголовки