Servir arquivos diferentes para agentes de usuários específicos usando o nginx

7

Usando o nginx, como você veicula arquivos estáticos diferentes para diferentes agentes de usuário? Por exemplo, se o usuário atual estiver usando um iPhone, ele deverá ser veiculado mobile_index.html , enquanto todos os outros agentes de usuário deverão ser veiculados browser_index.html .

Solução encontrada:

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;
    }
  }
}
    
por summatix 26.10.2011 / 21:52

1 resposta

9

Se você tem uma versão nova do nginx (0.9.6+), você pode fazer isso com um mapa :

map $http_user_agent $myindex {
  default /browser_index.html;
  ~iPhone /mobile_index.html;
}

server {
  listen 80;
  root /var/www;

  location = / { rewrite ^ $myindex; }
}

Se você não precisa de um redirecionamento interno (o que você provavelmente não faria se estivesse apenas servindo arquivos estáticos para os índices), você poderia adicionar um sinalizador 'break' à reescrita e evitar o redirecionamento interno. / p>

EDIT: Se você estiver usando uma versão mais antiga, você poderia fazer algo assim:

server {
  listen 80;
  root /var/www;

  location = / {
    set $myindex /browser_index.html;
    if ($http_user_agent ~ iPhone) {
      set $myindex /mobile_index.html;
    }
    rewrite ^ $myindex;
  }
}

novamente, usando o sinalizador de quebra se você não precisar do redirecionamento interno.

    
por 27.10.2011 / 02:13