URL de redirecionamento Nginx contendo “PHP”

1

Recentemente eu mudei o meu site que foi usado PHP / Apache para Django / Nginx. Eu gostaria de dar uma resposta http 301 e redirecionar para a minha página principal todos os pedidos que contenham ".php" no url.

Exemplo:

site.com/ ? page = show.php & id = 2748

site.com/ index.php? page = show_page.php & id = 2748

O ".php" pode estar em qualquer posição no URL.

Eu tentei:

localização ~ .php {         reescreva ^ / (. *) link permanente;     }

Mas, claro, isso só funciona quando temos .php no final. Alguém pode me dar uma pista?

ATUALIZADO: Se eu usar essa solução:

        if ($request_uri ~* "php") {
       rewrite ^/(.*) http://www.site.com permanent;
    }   

Eu recebo o seguinte erro no log:

[29/Aug/2011:13:30:25 -0300] "GET /?page=show_page.php&id=2748 HTTP/1.0" 301 184 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0"
[29/Aug/2011:13:30:26 -0300] "GET /?page=show_page.php&id=2748 HTTP/1.0" 301 184 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0"
[29/Aug/2011:13:30:26 -0300] "GET /?page=show_page.php&id=2748 HTTP/1.0" 301 184 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0"
[29/Aug/2011:13:30:27 -0300] "GET /?page=show_page.php&id=2748 HTTP/1.0" 301 184 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0"
[29/Aug/2011:13:30:27 -0300] "GET /?page=show_page.php&id=2748 HTTP/1.0" 301 184 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0"
[29/Aug/2011:13:30:28 -0300] "GET /?page=show_page.php&id=2748 HTTP/1.0" 301 184 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0"
[29/Aug/2011:13:30:28 -0300] "GET /?page=show_page.php&id=2748 HTTP/1.0" 301 184 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0"

Por que ele tenta redirecionar muitas vezes?

ATUALIZADO: Eu tentei:

if ($ request_uri ~. .php. ) {         reescreva ^ / link permanente;     }

está funcionando, mas quando o URL começa com "?" Eu recebo o mesmo erro. Então, 50% do problema foi resolvido ...

SOLUÇÃO:         if ($ request_uri ~. .php. ) {             #retorno 410;         reescrever ^ http: // $ host? permanente;

    
por Thomas 28.08.2011 / 18:24

2 respostas

6

O problema estava na reescrita.

Eu mudei reescrever para retornar o código 410, acho que eu faria isso em vez de retornar o retorno 301 (permanente).

Então, aqui está o código:

if ($request_uri ~ .*.php.*) {
        return 410;
}

Agora, o nginx retornará 4010 para todas as páginas que contiverem ".php" em qualquer lugar na URL. Meu site django pode viver em paz agora; -)

    
por 10.09.2011 / 04:47
0

ATUALIZADO:

Adicione o seguinte junto com sua condição atual:

if ($args ~* "php") {
    rewrite ^/(.*) http://www.site.com permanent;
}
    
por 29.08.2011 / 06:44