Como faço para persuadir o Nginx a redirecionar todas as solicitações, exceto o /robots.txt?

2

Estou usando o Nginx e apontando alguns nomes de domínio antigos para um novo site.

O primeiro bloco dessa configuração funciona bem para a necessidade de old.domain se comportar ao redirecionar para new.domain .

No segundo bloco, estou tentando encaminhar qualquer solicitação para oldmediaserver.domain exceto /robots.txt para a página inicial de new.domain Em seu estado atual, cada solicitação redireciona inclusive para /robots.txt - e não consigo descobrir o porquê.

(A razão para isso é que eu tinha algo indexado pelo Google do domínio antigo e estou tentando removê-lo dos resultados de pesquisa por meio de ferramentas do webmaster - isso pode não funcionar, mas não é isso que eu sou pedindo ajuda aqui!).

# Old site to new site config

server {
    listen 80;
    listen [::]:80;

    server_name old.domain www.old.domain;

    rewrite     ^ $scheme://www.new.domain$request_uri permanent;
}

# Media server Redirect and Robots directive

server {
    listen 80;
    listen [::]:80;

    server_name oldmediaserver.domain www.oldmediaserver.domain;

    location / {
        rewrite     / $scheme://www.new.domain/ permanent;
    }


    location /robots.txt {
        return 200 "User-agent: *\nDisallow: /";
    }

    rewrite     ^ $scheme://www.new.domain/ permanent;

}


server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/website-name/html;

    # Add index.php to the list if you are using PHP
    index index.php index.html index.htm index.nginx-debian.html;

    server_name www.new.domain;

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ /index.php?$args;
    }

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;

        #   # With php5-fpm:
        fastcgi_pass unix:/var/run/php5-fpm.sock;
    }

    # include a file for any 301 redirects
    include includes/website-name-redirects;

  location /members/ {
      try_files $uri $uri/ /index.php?$args;
      auth_basic "Members Login";
      auth_basic_user_file /var/www/website-name/html/.htpasswd;

      location ~ \.php$ {
          include snippets/fastcgi-php.conf;

          # With php5-fpm:
          fastcgi_pass unix:/var/run/php5-fpm.sock;
      }

   }

  #!!! IMPORTANT !!! We need to hide the password file from prying eyes
  # This will deny access to any hidden file (beginning with a .period)
  location ~ /\. { deny  all; }

}

Obrigado por qualquer luz que você possa derramar!

    
por Ben 08.11.2015 / 20:02

1 resposta

2

Obrigado ao gf_ e Drifter104 para os comentários. O comentário do Drifter104 sobre a correspondência com a localização me fez observar os diferentes padrões de correspondência e, eventualmente, pousar na configuração abaixo.

# Media server Redirect and Robots directive

server {
    listen 80;
    listen [::]:80;

    server_name oldmediaserver.domain www.oldmediaserver.domain;

    location ^~ / {
        rewrite     ^ $scheme://www.new.domain/ permanent;
    }

    location ^~ /robots.txt {
        return 200 "User-agent: *\nDisallow: /";
    }
}

Eu ainda não tenho certeza se entendi bem por que isso funciona e o outro não, então se alguém pode lançar mais luz, seria ótimo!

    
por 09.11.2015 / 22:12