Orbit
Настройка перенаправлений и переписей
Orbit has a built-in redirect and rewrite engine that runs before your project is asked for anything, configured either in KPanel or as a file in your repository. This guide covers both, the pattern…
Orbit имеет встроенный движок перенаправлений и переписи, который работает до того, как к вашему проекту поступает запрос. Он настраивается либо в KPanel, либо как файл в вашем репозитории. Это руководство охватывает оба варианта, синтаксис паттернов и их захваты, порядок правил, лимиты и поведение, которое застает людей врасплох.
Где настроить правила
Есть два места, и они оцениваются в фиксированном порядке.
- В KPanel. Откройте проект в Orbit, перейдите в Settings и прокрутите до раздела redirects and rewrites для окружения. Каждое окружение имеет собственный независимый набор правил, поэтому production и staging настраиваются отдельно.
- В вашем репозитории, как файл
kaps.json. Это подробнее описано ниже.
Правила панели оцениваются первыми. Если ни одно из них не совпадает, то пробуются правила из kaps.json.

Добавление правила в KPanel
- Нажмите Add rule.
- Заполните source, паттерн пути для сравнения входящих запросов. Подсказка показывает две формы, которые он ожидает:
/old-path or /blog/:slug. - Заполните destination. Подсказка показывает
/new-path or https://..., поэтому оба варианта, локальный путь и полный внешний URL, допустимы. - Выберите тип правила:
- 301 Permanent: URL переместился окончательно. Браузеры и поисковые системы кэшируют это.
- 302 Temporary: временное перемещение, не кэшируется. Используйте для кампаний и экспериментов.
- Rewrite: выдавайте путь места назначения без изменения URL в адресной строке браузера.
- Нажмите Save rules.
Правила вступают в силу со следующего развертывания, а не сразу же. Сохранение правила не меняет то, что выдает текущее live развертывание. Повторно разверните после сохранения, или ваши правила будут казаться не работающими.
301 кэшируется браузерами, иногда на очень долгое время, и с сервера невозможно это очистить. Если вы не уверены, что перемещение постоянно, сначала используйте 302 и переключитесь на 301 как только будете уверены. Ошибиться в этом на пути с высоким трафиком действительно сложно исправить.
Паттерны исходного пути
| Паттерн | Совпадает | Захваты |
|---|---|---|
/old-page | Ровно /old-page | Ничего |
/blog/* | Все, что начинается с /blog/ | Остаток пути, на который ссылаются как * в месте назначения |
/posts/:id | /posts/ плюс один сегмент пути | Этот сегмент как :id |
/files/:rest* | /files/ плюс все после него, включая слеши | Весь остаток как :rest |
Разница между :id и :rest*, это важная. Именованный параметр совпадает с одним сегментом и останавливается перед следующим слешем. Splat совпадает со всем оставшимся, включая слеши.
Использование захватов в месте назначения
Ссылайтесь на именованный параметр по имени, а на простой wildcard как *:
| Источник | Место назначения | Результат |
|---|---|---|
/blog/:slug | /articles/:slug | /blog/hello-world становится /articles/hello-world |
/docs/:rest* | /help/:rest* | /docs/a/b/c становится /help/a/b/c |
/old/* | /new/* | /old/a/b становится /new/a/b |
Порядок правил
Правила проверяются сверху вниз, и первое совпадение побеждает. Как только правило совпадает, более поздние правила не рассматриваются. Панель это указывает под списком: "Rules are tested in order. First match wins."
Размещайте конкретные правила выше общих. Правило /blog/*, размещенное выше /blog/2023/:slug, перехватит каждый запрос, который должно было обработать более конкретное правило, и будет казаться, что конкретное правило просто сломано.
Если ни одно правило не совпадает, запрос обслуживается нормально.
Типичные случаи использования
Переименование страницы
Вы переименовали /about-us на /about и хотите, чтобы старые ссылки продолжали работать.
- Источник:
/about-us - Место назначения:
/about - Тип: 301 Permanent
Перемещение целого раздела
Ваш блог переместился с /news/:slug на /blog/:slug.
- Источник:
/news/:slug - Место назначения:
/blog/:slug - Тип: 301 Permanent
Прокси пути API без видимости
Вы хотите, чтобы /api/v1/* выдавался с другого внутреннего пути без раскрытия изменения.
- Источник:
/api/v1/:path* - Место назначения:
/api/internal/:path* - Тип: Rewrite
Временная страница-заглушка
- Источник:
/checkout - Место назначения:
/maintenance - Тип: 302 Temporary
Отправка трафика на другой домен
Место назначения может быть абсолютным URL, поэтому правило может указывать на совсем другой сайт.
- Источник:
/shop/:rest* - Место назначения:
https://shop.example.com/:rest* - Тип: 301 Permanent
Конфигурация как код с kaps.json
Правила могут находиться в вашем репозитории вместо панели. Добавьте файл kaps.json, и убедитесь, что ваша сборка копирует его в output directory, потому что Orbit читает его из корня встроенного артефакта, а не из корня репозитория.
{
"redirects": [
{ "source": "/about-us", "destination": "/about", "permanent": true },
{ "source": "/news/:slug", "destination": "/blog/:slug", "permanent": true },
{ "source": "/promo", "destination": "/spring-sale", "permanent": false }
],
"rewrites": [
{ "source": "/api/v1/:path*", "destination": "/api/internal/:path*" }
],
"headers": [
{
"source": "/*",
"headers": [
{ "key": "X-Frame-Options", "value": "DENY" },
{ "key": "X-Content-Type-Options", "value": "nosniff" }
]
}
]
}
permanent: true создает 301, а permanent: false, 302. Если опустить, создается 301.
kaps.json применяется к статическим развертываниям только. Если включен Server mode, ваше приложение обрабатывает собственную маршрутизацию и файл игнорируется. Он также оценивается только после того, как правила панели окружения не совпадают, поэтому правило панели всегда выигрывает у правила файла для одного и того же пути.
Используйте kaps.json, когда правила связаны с кодом, чтобы они рецензировались в pull request и перемещались при откате. Используйте панель, когда вам нужно правило сейчас без развертывания. Не поддерживайте одно и то же правило в обоих местах: правило панели всегда выигрывает и правило файла будет казаться игнорируемым, потому что оно игнорируется.
Лимиты
- До 100 правил перенаправления и переписи на окружение, и 100 в
kaps.json. - До 200 правил пользовательских заголовков на окружение.
Правила сверх лимита отбрасываются молча, а не вызывают ошибку, поэтому держитесь хорошо ниже лимита.
Пользовательские заголовки ответа
Наряду с перенаправлениями, каждое окружение имеет раздел заголовков ответа в Settings для внедрения HTTP заголовков на совпадающих путях. Он использует тот же синтаксис паттернов пути, и есть быстрые пресеты для HSTS, CSP, no-embed, no-sniff, referrer policy и CORS.
В отличие от перенаправлений, все совпадающие правила заголовков применяются, а не только первое, и более позднее правило перезаписывает более раннее, когда они устанавливают один и тот же заголовок. Content-Length, Transfer-Encoding и Connection заблокированы, потому что их установка повредит ответ.
Поведение, которое стоит знать перед тем как на него полагаться
Строки запроса не переносятся через перенаправление. Правило совпадает независимо от того, имеет ли запрос строку запроса, но место назначения построено из вашего шаблона и захваченных сегментов пути только. Запрос к /old?utm_source=email перенаправляется на /new, с параметрами удалены. Если вы зависите от того, что параметры отслеживания выживают, обработайте перенаправление в функции edge вместо этого, где вы полностью контролируете URL места назначения.
- Правила совпадают только с путем. Фрагменты (
#section) никогда не достигают сервера; браузер переприкрепляет их после перенаправления. - Переписи на путь, который не существует, создает 404, а не молчаливо падает обратно на исходный путь. Цели переписи должны существовать в вашем выходе сборки.
- Правила работают до того, как ваш проект запрашивается на что-либо, поэтому они применяются как к статическим файлам, так и к серверным запросам.
- Каждое окружение независимо. Правила на production не применяются к staging или превью. Скопируйте их сознательно.
Удаление правила
Нажмите значок мусорной корзины на строке правила, затем нажмите Save rules для применения изменения. Как и при добавлении, изменение вступает в силу со следующего развертывания.
Когда вместо этого использовать функцию Edge
Движок перенаправления обрабатывает правила path-to-path. Обратитесь к функции edge, когда вам нужна логика, которую движок правил не может выразить: ветвление по заголовку или cookie, сохранение или переписывание параметров запроса, взвешенная A/B маршрутизация или что-либо условное.