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/+ - що я роблю неправильно?

Відповіді:


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;
  }
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.