Redirecionamento 301 NGINX

Nginx é um grande servidor web, é também o servidor utilizado por este blog. Eu já utilizava o Nginx no meu ambiente de desenvolvimento e agora que eu resolvi mudar de vez da kinghost para a DigitalOcean, foi a chance que eu precisava para utilizá-lo também por aqui, para tal, eu tive que criar uma série de redirecionamentos tanto para melhorar a experiência do usuário evitando que os usuários fossem direcionados para páginas 404 quanto para indexação do motor de busca. Este post vai mostrar como criar alguns redirecionamentos 301 permanentes em seu arquivo de configuração Nginx.

Sempre que possível evite redirecionar páginas, mantendo as mesmas url’s quando você refaz um site. Mas se ainda assim você precisar redirecionar domínios, diretŕoios ou páginas em um servidor Nginx esse post vai te ajudar.

NGINX – Redirecionando Domínios

Para os sites novos, ter o www antes de seu domínio não é realmente necessário. Aqui está como redirecionar a versão www do seu site para a versão limpa, ou seja, a versão sem www.

Redirecionamento WWW para sem WWW


server   {
   server_name www.seudominio.eti.br;
   rewrite  ^/(.*)$  http://seudominio.eti.br/$1 permanent;
}

Redirecionamento sem WWW para WWW

Da mesma maneira, se o seu site já está publicado há bastante tempo, e utilizando a versão www, você pode ter certeza que os usuários serão redirecionados para a versão www.


server   {
   server_name seudominio.eti.br;
   rewrite  ^/(.*)$  http://www.seudominio.eti.br/$1 permanent;
}

NGINX Redirecionamento de Diretório

Pode ser necessário redirecionar todo um diretório de páginas para outro se você renomeá-lo. Caso você tenha que alterar a estrutura do site, possivelmente, você terá um conjunto desses em seu arquivo de configuração.

Essa diretiva vai dentro do bloco do servidor principal de seus sites de configuração NGINX.


if ( $request_filename ~ diretorio-antigo/.+ ) {
       rewrite ^(.*) http://seudominio.com/diretorio-novo/$1 permanent;
   }

if ( $request_filename ~ diretorio-antigo/.+ ) {
       rewrite ^(.*) http://seudominio.com/diretorio-novo/$1 permanent;
   }

Caso seja necessário, você pode simplesmente remover o diretório, dessa maneira:


if ( $request_filename ~ diretorio-antigo/.+ ) {
       rewrite ^(.*) http://seudominio.com/$1 permanent;
   }

Você pode reescrever a mesma regra acima, utilizando apenas uma linha, dessa forma:


location / {
    rewrite ^/diretorio-antigo/(.*) /$1 permanent;
}

NGINX Redirecionamento de Página

Quando você reconstruir um site, é comum para remover as páginas, ou renomeá-los. Se a página não tem links de outros sites, você não quer que os usuários que clicarem no link para terra em uma página de erro 404. A melhor coisa a fazer neste caso é enviar o usuário para a página seguinte mais útil.

Utilize essa diretriz no bloco de servidor para redireccionar páginas únicas.


if ( $request_filename ~ pagina-antiga/ ) {
      rewrite ^ http://seudominio.com/proxima-pagina/? permanent;
}

Você também pode utilizar o redirecionamento de página, para disponibilizar o arquivo robots.txt e o sitemap.xml.


location ~ ^/(sitemap.xml) {
    root /var/www/blog.adlerdias.eti.br/public;
}

location ~ ^/(robots.txt) {
    root /var/www/blog.adlerdias.eti.br/public;
}

abraço,
até a próxima

Publicado por

adlerdias

Oi! Sou Adler Dias, 30, programador, trabalho com desenvolvimento de sistemas há 10 anos. Apaixonado pela minha namorada Alyne. Meu principal hobby é a corrida, já corri uma são silvestre e...

2 comentários em “Redirecionamento 301 NGINX”

  1. boa tarde amigo com NGINX consigo fazer o seguinte;
    site.dominio.com/serviço1 – ( servidor 1 10.10.10.10 )
    site.dominio.com/servico2 – ( servidor 2 20.20.20.20 )
    utilizando inclusive o mesmo certificado digital HTTPS?
    Valeu

    1. Fábio,
      Bom dia, Tudo bem?

      location /servico1 {
      proxy_pass http://10.10.10.10/;
      }
      proxy_pass avisa o nginx para encaminhar as requisições de /servico1 para o servidor http://10.10.10.10

      location /servico2 {
      proxy_pass http://20.20.20.20/;
      }
      proxy_pass avisa o nginx para encaminhar as requisições de /servico2 para o servidor http://20.20.20.20

      Lembrando que tanto no http://10.10.10.10 quanto no http://20.20.20.20 você terá outro serviço escutanto as requisições(apache, nginx,um server node).

      Qualquer coisa não deixe de comentar.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax