Nginx redireciona todas as subpastas, mas a própria pasta

3

Eu tenho um estranho confronto de nomes para uma instalação do Wordpress, e preciso escrever algumas regras do Nginx para corrigi-lo.

Eu costumava ter meus projetos de software listados na página do Wordpress / projects , com links para subpáginas / projects / aprojectname , / projects / anothername , etc.

Recentemente, comprei um tema com um tipo de postagem personalizado para itens do portfólio. É chamado de projeto (observe os s s ausentes).

Em / project , acesso a listagem padrão do Wordpress de todas as postagens do projeto . Então, eu posso acessar os posts usando / project / aprojectname , / projeto / anothername , etc.

Até agora, tudo bem. A questão é que eu gostaria de usar a nova estrutura / projeto preservando qualquer link anterior para o meu / projects / something. Além disso, gostaria de manter apenas a página / projects (sem redirecionamento).

Isso é o que eu gostaria de realizar.

  1. A URL / project somente deve redirecionar para / projects , para que eu possa mostrar uma página do Wordpress em vez da " feia "Wordpress lista de posts.

  2. Consequentemente, o URL / projects somente não deve ser processado. Ele deve exibir a página correspondente do Wordpress.

  3. No entanto, todos URLs no formulário / projects / something devem redirecionar para / project / something

Esta é a minha regra nginx até agora.

location ~ ^/projects/(.*) {
   return 301 http://$server_name/project/$1;
}

Isso funciona bem em 3 .: / projects / aprojectname - > / project / aprojectname.

Não funciona para 2., porque reescreve / projeta para / project

Eu não tenho ideia de como implementar 1., pois qualquer tentativa afetará a regra escrita anteriormente.

    
por dgraziotin 03.03.2014 / 11:44

1 resposta

1

location ~ ^/projects/(.+) {
    rewrite ^ http://$server_name/project/$1 permanent;
}

O. + em vez de. * corrige o problema, uma vez que. + corresponde a 1 ou mais caracteres, enquanto. * corresponde a 0 ou mais caracteres. Portanto, a pasta / projects / não é tocada pela regra.

Para 1, o seguinte deve funcionar:

location = /project {
    rewrite ^ http://$server_name/projects permanent;
}

location = é a diretiva de correspondência exata para nginx, portanto, só coincide se o URI for exatamente /project .

Eu também substitui a diretiva de retorno 301 por reescrita -diretiva, já que essa é a forma preferida de reescrever.

  • Tero
por 03.03.2014 / 13:48

Tags