Saltar al contenido principal

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 rewrite ou 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=$1
  • break

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 directivas rewrite no bloque server actual ou no contexto location, pero NGINX continúa buscando bloques location que encaixen co URI transformado e póde haber novas directivas rewrite no novo contexto location (significando que o URI pode volver a cambiar).
  • break – Do mesmo xeito que a directiva break, detense o procesamento das directivas rewrite no contexto actual e cancélase a búsqueda de novos bloques location que encaixen co novo URI. As directivas rewrite no novo contexto location non se executan.