Назад | Перейти на главную страницу

Как убедить Nginx перенаправить все запросы, кроме /robots.txt?

Я использую Nginx и указываю пару старых доменных имен на новый сайт.

Первый блок в этой конфигурации отлично работает так, как мне нужно old.domain вести себя при перенаправлении на new.domain.

Во втором блоке я пытаюсь переслать любой запрос на oldmediaserver.domain Кроме /robots.txt на главную страницу new.domain. В текущем состоянии каждый запрос перенаправляется, в том числе для /robots.txt, и я не могу понять почему.

(Причина в том, что у меня было что-то проиндексировано Google из старого домена, и я пытаюсь удалить это из результатов поиска с помощью инструментов для веб-мастеров - это может не сработать, но я прошу помощи не по этому поводу! ).

# 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; }

}

Спасибо за свет, который вы пролили!

Благодаря gf_ и Скиталец104 за комментарии. Скиталец104Комментарий о сопоставлении местоположения заставил меня изучить различные шаблоны сопоставления и в конечном итоге попасть в конфигурацию ниже.

# 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: /";
    }
}

Я до сих пор не уверен, что полностью понимаю, почему это работает, а другое - нет, поэтому, если кто-то может пролить больше света, это было бы здорово!