Reescrita de URLs com rewrite
A diretiva rewrite muda a URL da requisição usando expressões regulares. Ela é mais poderosa que o return, pois permite capturar partes da URL.
Sintaxe básica
A rewrite recebe um padrão regex e o destino:
rewrite ^/blog/(.*)$ /artigos/$1 last;
O (.*) captura o que vier depois de /blog/ e o $1 reusa esse trecho no destino.
As flags
No final da rewrite você coloca uma flag que define o comportamento:
- last: aplica a reescrita e procura um novo
locationpara a URL nova. - break: aplica a reescrita e para de processar regras naquele bloco.
- redirect: envia um redirecionamento 302 para o navegador.
- permanent: envia um redirecionamento 301.
location / {
rewrite ^/produto/(\d+)$ /produto.php?id=$1 last;
}
last vs redirect
Use last ou break para reescritas internas, invisíveis ao usuário. Use redirect ou permanent quando quiser que o navegador mude de URL visivelmente.
Prefira return quando possível
Para redirecionamentos simples, o return é mais rápido e claro. Reserve o rewrite para casos que exigem captura com regex.
Resumo
O rewrite reescreve URLs com regex e usa $1, $2 para capturas. As flags last e break fazem mudanças internas; redirect e permanent redirecionam o navegador.