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.

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