Вот мой текущий файл nginx conf:
server {
listen 90;
server_name www.domain.com www.domain2.com;
root /root/app;
location / {
try_files $uri =404;
}
location ~ /([-\w]+)/(\w+)/ {
proxy_pass bla bla
}
}
он отлично работает, www.domain.com
и www.domain2.com
обслуживает один и тот же контент.
Теперь я хотел бы добавить
если пользователь посещает www.domain.com, а пользовательский агент - xxx, тогда перенаправьте на www.domain2.com
Я искал и пробовал много методов, но ни один из них не работает.
Ответы:
Есть два способа решить эту проблему.
Иметь два отдельных «серверных» блока для www.domain.com и www.domain2.com и добавить следующие строки правил в «серверный» блок www.domain.com. Это рекомендуемый способ решения этой проблемы.
Если вы хотите управлять перенаправлением с помощью одного «серверного» блока для обоих доменов, попробуйте следующие правила
источник
Шаг 1: Иметь два серверных блока, по одному для domain.com и domain2.com.
Шаг 2: Используйте, если правильно, поскольку это зло, если используется неправильно.
Вот полное решение ...
источник
Рекомендуемый способ, вероятно, будет использовать, а
map
также потому, что эти переменные оцениваются только тогда, когда они используются.Кроме того, использование
return 301 ...
предпочтительнее, чем перезапись, потому что регулярное выражение не нужно компилировать.Вот пример, где хост и пользовательский агент в виде объединенной строки сравниваются с одним регулярным выражением:
И это может быть еще более гибким, например, если задействовано не 2, а несколько доменов.
Здесь мы отображаем
www.domain.com
с пользователем агенты , начиная сAgent
кhttp://www.domain2.com
иwww.domain2.com
с точным агентом пользователяOther Agent
дляhttp://www.domain3.com
:Примечание: вам понадобится nginx 0.9.0 или выше, чтобы конкатенированная строка в карте работала.
источник