nginx: переписать все, кроме одного места

11

Прямо сейчас мой nginx переписывает несколько доменов в один основной домен, который мы используем. Вот одно правило из моего конфига:

server {
  listen X.X.X.X:80;
  server_name .exampleblog.org;
  rewrite ^(.*) http://blog.example.org$1 permanent;
}

Каждый запрос к ** exampleblog.org * перенаправляется на blog.example.org

Теперь я хочу, чтобы www.exampleblog.org/+ и exampleblog.org/+ перенаправили пользователя на нашу страницу Google Plus. Пробовал разные версии:

server {
  listen X.X.X.X:80;
  server_name .exampleblog.org;
  location /+ {
    rewrite ^ https://plus.google.com/12345678901234567890/ permanent;
  }
  rewrite ^(.*) http://blog.example.org$1 permanent;
}

Выше и другие версии просто перенаправить на blog.example.org/+ - что я делаю не так?

Lorem Monkey
источник

Ответы:

14

Директивы в nginx не обязательно применяются в порядке их появления в файле конфигурации. Перезапись на уровне сервера действует до выбора местоположения, и она всегда совпадает, поэтому она будет перенаправлять все. Вам нужно второе место, например, так:

server {
  listen x.x.x.x:80;
  server_name .exampleblog.org;

  # Match /+ requests exactly    
  location = /+ {
    # I prefer return 301 instead of rewrite ^ <target> permanent,
    # but you can use either
    return 301 http://plus.google.com/1234567890/;
  }

  # Match everything else
  location / {
    return 301 http://blog.example.org$request_uri;
  }
}
kolbyjack
источник