rewrite
Директива `rewrite` изменяет URI запроса на основе заданных шаблонов и строк замены. — NGINX HTTP Core
Описание
Директива `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.