Nginx redireciona um caminho para outro

38

Tenho certeza de que isso foi perguntado antes, mas não consigo encontrar uma solução que funcione.

Um site trocou de serviços CMS, mas tem o mesmo domínio, como configuro um nginx reescrito para uma única página?

Por exemplo

Página antiga

link

Nova página

link

Por favor, note , eu não quero que tudo dentro da página de conteúdo seja redirecionado, mas literalmente apenas a URL mencionada acima. Eu tenho cerca de 9 redirecionamentos para configurar, não cabendo em um padrão.

Obrigado!

Editar: eu encontrei esta solução, que parece estar funcionando, exceto pelo fato de que ela redireciona sem uma barra:

if ( $request_filename ~ content/unique-page-name/ ) {
   rewrite ^ http://sitedomain.co.uk/new-name/unique-page-name/? permanent;
}

Mas isso redireciona para:

http://sitedomain.co.uknew-name/unique-page-name/

    
por SteveEdson 25.10.2013 / 09:06

4 respostas

67

Citações diretas de Armadilhas e erros comuns: recompensas de impostos :

By using the return directive we can completely avoid evaluation of regular expression.

Por favor, use return em vez de rewrite para redirecionamentos permanentes. Aqui está minha abordagem para este caso de uso ...

location = /content/unique-page-name {
  return 301 /new-name/unique-page-name;
}
    
por 25.10.2013 / 09:44
9

Idealmente, você não deve usar instruções if se puder evitá-las. Algo como isso poderia funcionar (não testado).

location ~ /content/(.*)$ {
    rewrite ^ /new-name/$1?$args permanent;
} 
    
por 25.10.2013 / 09:17
9

Eu usei a seguinte solução:

rewrite ^(/content/unique-page-name)(.*)$   http://sitedomain.co.uk/new-name/unique-page-name/$2 permanent;

Funciona um prazer.

    
por 25.10.2013 / 09:32
5

Para mim, funcionou sem o sinal de igual como este:

location /old-url {
  return 301 /new-url;
}
    
por 04.02.2016 / 12:26