Как с помощью nginx обслуживать разные статические файлы для разных пользовательских агентов? Например, если текущий пользователь использует iPhone, он должен обслуживаться mobile_index.html
, тогда как все остальные пользовательские агенты должны обслуживаться browser_index.html
.
Нашел решение:
server {
listen 80;
root /var/www;
set $mobile_request '0';
if ($http_user_agent ~ 'iPhone') {
set $mobile_request '1';
}
location =/ {
if ($mobile_request = '1') {
rewrite ^ /mobile_index.html;
}
if ($mobile_request = '0') {
rewrite ^ /browser_index.html;
}
}
}
Если у вас достаточно новая версия nginx (0.9.6+), вы можете сделать это с помощью карта:
map $http_user_agent $myindex {
default /browser_index.html;
~iPhone /mobile_index.html;
}
server {
listen 80;
root /var/www;
location = / { rewrite ^ $myindex; }
}
Если вам не нужно внутреннее перенаправление (чего, вероятно, не будет, если вы просто обслуживаете статические файлы для индексов), вы можете добавить к перезаписи флаг «break» и избежать внутреннего перенаправления.
РЕДАКТИРОВАТЬ: если вы используете старую версию, вы можете сделать что-то вроде этого:
server {
listen 80;
root /var/www;
location = / {
set $myindex /browser_index.html;
if ($http_user_agent ~ iPhone) {
set $myindex /mobile_index.html;
}
rewrite ^ $myindex;
}
}
снова, используя флаг прерывания, если вам не нужно внутреннее перенаправление.