rewrite
Calquera petición de URI pode ser modificada durante o procesamento mediante o uso da directiva rewrite, que ten tres parámetros:
- Primeiro parámetro (obrigatorio): expresión regular coa que dede encaixar o URI.
- Segundo parámetro (obrigatorio): URI de substitución.
- Terceiro parámetro (opcional): flag que pode deter o procesamento de directivas
rewriteou enviar códigos de resposta ao cliente (códigos 301 ou 302).
Exemplo:
server {
root /www/data;
location /users/ {
rewrite ^/users/(.*)$ /show?user=$1 break;
}
}
Os parámetros do rewrite do exemplo anterior son:
^/users/(.*)$/show?user=$1break
Pódese comprobar que o segundo parámetro captura as expresións regulares que si encaixan co primeiro.
Pode haber moitas directivas rewrite tanto nos bloques server coma nos location. NGINX execútaas unha a unha na orde na que aparecen. As directivas rewrite incluídas no contexto server execútanse unha vez que se activa o contexto.
Despois de que NGINX procese un conxunto de instrucións de reescritura, selecciona os contextos location dacordo co novo URI. Se a súa vez volve haber directivas rewrite, execútanse en orde. Se algunha encaixa, vólvese a buscar outro bloque location co novo URI unha vez se procesen as directivas rewrite.
No seguinte exemplo, pódense ver as directivas rewrite en combinación coa directiva return:
server {
#...
rewrite ^(/download/.*)/media/(\w+)\.?.*$ $1/mp3/$2.mp3 last;
rewrite ^(/download/.*)/audio/(\w+)\.?.*$ $1/mp3/$2.ra last;
return 403;
#...
}
Nesta configuración de exemplo, distínguense dous conxuntos de URIs. URIs coma /download/some/media/file cámbianse por /download/some/mp3/file.mp3. Como está o flag last, as seguintes directivas sáltanse e continúase procesando a petición co novo URI. De xeito similar, URIs coma /download/some/audio/file remplázanse con /download/some/mp3/file.ra. E, se un URI non encaixa con ningun dos URI anteriores, NGINX devolve o código 403 ao cliente.
Hai dous parámetros que interrumpen o procesamento de dierectivas rewrite:
last– Detén a execución de directivasrewriteno bloqueserveractual ou no contextolocation, pero NGINX continúa buscando bloqueslocationque encaixen co URI transformado e póde haber novas directivasrewriteno novo contextolocation(significando que o URI pode volver a cambiar).break– Do mesmo xeito que a directivabreak, detense o procesamento das directivasrewriteno contexto actual e cancélase a búsqueda de novos bloqueslocationque encaixen co novo URI. As directivasrewriteno novo contextolocationnon se executan.