nginx retornar 301 / redirecionar

4

entre todas as perguntas de "redirecionamento no nginx" Não consegui encontrar como redirecionar (usando o retorno 301 e melhor sem ifs) usando regexps.

Eu tenho um link para o meu site e gostaria de remover o parâmetro no final:

domain.com/article/some-sluggish-link/?report=1        #number at end

Regex para encontrar isto:

\?report=\d*$

Para isso eu quero redirecionar 301 para:

domain.com/article/some-sluggish-link/

Eu nginx.conf eu tenho 3 redirecionamentos:

server {        
    listen 80;      
    server_name subdomain.example.com.; #just one subdomain 
    }

server {
    listen 80;
    server_name  *.example.com;         
    return 301 http://example.com$request_uri;
    }

server {
    listen 80;
    server_name  example.com;
    }

e funciona; ele redireciona 301 todos os www., ww., aaa. e todos os subdomínios, exceto 1 particular, para main domain.com

Eu gostaria de receber ajuda Felicidades!

EDIT 25/03/2015

Eu já tenho "location /" no meu arquivo conf:

location / {  
    uwsgi_pass unix://opt/run/ps2.sock;  
    include uwsgi_params;  
    }

que redireciona para algum aplicativo django. Depois de aplicar a cláusula 'if', isso me dá um loop infinito !!!

Meu problema é basicamente com SEO, o que significa que o Google indexa algumas páginas (aquelas com o parâmetro '? report =') que são cópias de urls sem esse parâmetro.

Eu queria que o googlebot parasse de indexar usando robots.txt, mas o problema é que você não pode usar regexps neste arquivo. Também não posso dizer qual URL exatamente precisa ser redirecionado ou parar de indexar porque acontece de alguma forma aleatoriamente ...

    
por ppp 20.03.2014 / 19:43

1 resposta

1

Eu não tentei isso sozinho, mas deve funcionar. Adicione isto dentro do seu servidor {} block:

location / {
    if ($args !~ ^$) {
        rewrite ^ $request_uri? permanent;
    }
}

O que esse bloco realmente faz:

location / diz ao nginx para aplicar essas diretivas a todos os pedidos correspondentes ao diretório raiz e aos subdiretórios.

if ($args !~ ^$) verifica se o URI contém algum parâmetro de consulta com expressão regular.

rewrite ^ $request_uri? permanent; faz o redirecionamento para o URI desejado sem nenhum parâmetro de consulta. O ? no final de $ request_uri informa ao nginx para remover parâmetros de consulta do URL de redirecionamento.

    
por 21.03.2014 / 00:54