Spec-Zone.ru › Caddy

перезапись

Перезаписывает внутренний URI запроса.

Перезапись изменяет часть или весь URI запроса. Обратите внимание, что URI не включает схему или авторизацию (хост и порт), и клиенты обычно не отправляют фрагменты. Таким образом, эта директива в основном используется для манипулирования частью пути и строкой запроса.

Директива rewrite подразумевает намерение принять запрос, но с изменениями.

Она несовместима с другими rewrite директивами в том же блоке, поэтому безопасно определять перенаправления, которые в противном случае могли бы перекрывать друг друга, так как будет выполнен только первый соответствующий перенаправление.

Сопоставитель запроса rewrite, который соответствует запросу до rewrite, возможно, не будет соответствовать тому же запросу после rewrite. Если вы хотите, чтобы ваш rewrite разделял маршрут с другими обработчиками, используйте директивы route или handle.

Синтаксис

rewrite [<matcher>] <to>
  • <to> — это URI, на который необходимо переписать запрос. Будут изменены только те компоненты URI (путь или строка запроса), которые указаны в перенаправлении. Путь URI — это любой подстрока, которая находится перед ?. Если ? опущено, то весь токен считается путём.

До версии v2.8.0, аргумент <to> мог быть неправильно воспринят анализатором как токен сопоставителя, если он начинался с /, поэтому необходимо было указать токен сопоставителя с подстановочным знаком (*).

Похожие директивы

Существуют и другие директивы, которые выполняют перенаправления, но подразумевают другое намерение или выполняют перенаправление без полной замены URI:

  • uri манипулирует URI (удаление префикса, суффикса или замена подстроки).

  • try_files переписывает запрос на основе наличия файлов.

Примеры

Перезаписать все запросы на index.html, оставив строку запроса неизменной:

example.com {
	rewrite * /index.html
}

Обратите внимание, что до версии v2.8.0 здесь требовался сопоставитель с подстановочным знаком, так как первый аргумент был неоднозначен с сопоставителем пути, т.е. rewrite * /foo, но теперь это можно упростить до rewrite /foo.

Добавить префикс /api ко всем запросам, сохраняя остальную часть URI, а затем обращаться к приложению через обратный прокси:

api.example.com {
	rewrite * /api{uri}
	reverse_proxy localhost:8080
}

Заменить строку запроса в запросах API на a=b, оставив путь неизменным:

example.com {
	rewrite * ?a=b
}

Для запросов только к /api/ сохранить существующую строку запроса и добавить пару ключ-значение:

example.com {
	rewrite /api/* ?{query}&a=b
}

Изменить и путь, и строку запроса, сохраняя исходную строку запроса и добавив исходный путь в качестве параметра p:

example.com {
	rewrite * /index.php?{query}&p={path}
}

© 2015-2025 Matthew Holt and The Caddy Authors
Licensed under the Apache License 2.0.
Caddy is a registered trademark of Stack Holdings GmbH.
https://caddyserver.com/docs/caddyfile/directives/rewrite

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API