Nginx - devolve página 410 personalizada com mapa

2

Primeiro de tudo, estou usando o Nginx 1.12.1. Eu quero realizar o seguinte:

  • Eu tenho uma lista de URLs, cada URL deve retornar 410 para fins de SEO
  • Eu quero incluir esta lista como um mapa na minha configuração nginx (porque é uma lista muito longa)
  • O 410 deve ser personalizado e se parecer com a página 404 (para os humanos acidentalmente indo para lá)

Snippet de configuração relevante:

map $uri $gone {
    include gone.map;
}

server {
    ...
    error_page 410 /410.html;

    # works
    location ~^/gone-location-1 {
        return 410;
    }

    # doesn't work
    if ($gone) {
        return 410;
    }

    location / {
        root /app/public/;
    }
}

ido.map:

~^/gone-location-2 1;

Em ambos os casos, estou fazendo o return 410 , mas o resultado é diferente. No caso "não funciona", o nginx mostra apenas a página 410 padrão, enquanto no caso "works", ele retornará 410.html. Em ambos os casos, o nginx retorna corretamente um código de status de 410.

Por que isso acontece? Eu realmente gosto da idéia do arquivo de mapa, e eu não quero criar 250 locais para fazer isso funcionar. Alguma idéia de como realizar isso?

Edit: Eu apenas tentei mais uma coisa. Eu obtenho exatamente o mesmo resultado com 404 em vez de 410.

    
por martin s. 06.10.2017 / 14:07

1 resposta

0

Resposta tardia, mas me deparei com esse problema e encontrei uma solução.

server {

    error_page 410 @gone;

    if ($gone_var) {
        return 410;
    }

    location @gone{
        root /app/public/;
        rewrite ^(.*)$ /410.html break;
    }

    location / {
        root /app/public/;
    }
}
    
por 21.03.2018 / 22:29