Eu tenho duas opções (retorno e reescrita) para redirecionamento e não tenho certeza do que é recomendado para desempenho, SEO, etc.:
## Redirect from non-www to www
server {
server_name example.com;
# Option 1
return 301 $scheme://$host$request_uri;
# Option 2
rewrite ^ http://$host$request_uri? permanent;
}
## Default server config
server {
...
listen 192.168.1.1:80 default_server;
root /www;
server_name www.example.com;
A opção 2 parece funcionar com curl, mas não é redirecionada quando chamada por um navegador e o código de retorno é o de um redirecionamento temporário, apesar da diretiva de reescrita estar definida como permanent
:
curl -I example.com
HTTP/1.1 302 Moved Temporarily
Server: nginx
...
Location: http://www.example.com/
...
Tecnicamente, você pode usar as duas opções. Eles podem trabalhar.
De acordo com a documentação do NGINX , use
return
se puder . É mais simples e rápido porque o NGINX para de processar a solicitação (e não precisa processar uma regex). Mais do que isso, você pode especificar um código na série 3xx :Se você tem um cenário em que precisa validar a URL com uma regex ou precisa capturar elementos na URL original (que obviamente não estão em uma variável NGINX correspondente), use-o
rewrite
. Você deve saber querewrite
retorna apenas o código 301 ou 302.Você pode ler mais sobre devolução e reescrita no site da NGINX.
fonte