rewrite

Директива `rewrite` изменяет URI запроса на основе заданных шаблонов и строк замены.

Синтаксисrewrite regex replacement [flag];
По умолчаниюnone
Контекстserver, location, if in server, if in location
Аргументы2-3

Описание

Директива rewrite в NGINX используется для изменения URI входящих запросов на основе конкретных шаблонов регулярных выражений. Эта директива особенно полезна для перенаправления URL или для преобразования URL-адресов с целью более чистого и удобного доступа. Директива принимает два или три аргумента: первый — шаблон регулярного выражения, который будет сопоставляться с URI входящего запроса, второй — строка замены, на которую будет изменён URI, а необязательный третий аргумент задаёт флаг, определяющий, выполняется ли перезапись в текущем контексте запроса или приводит к новому запросу, также называемому redirect.

Когда директива rewrite выполняется, NGINX сравнивает URI входящего запроса с указанным регулярным выражением. Если совпадение найдено, она заменяет совпавшую часть строкой замены, фактически переписывая URI. Если используется флаг, такой как last, break или redirect, NGINX будет далее обрабатывать запрос в соответствии с поведением этого флага. Например, last остановит обработку перезаписи и продолжит работу с новым URI, тогда как break прекратит обработку текущего набора директив, а redirect отправит ответ 302, заставив клиента перейти на новый URI.

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

Пример конфига

rewrite ^/oldpath/(.*)$ /newpath/$1 permanent;

Убедитесь, что regular expression точно соответствует назначенному URI, поскольку производительность может ухудшаться при чрезмерно сложных шаблонах.

Использование флага redirect инициирует полный client redirect, что может быть неуместно для внутренних rewrites.

Необходимо принимать меры, чтобы избежать infinite rewrite loops, убедившись, что rewritten URI снова не совпадает с rewrite rule.

← Ко всем директивам