8

Using nginx, how do you serve different static files for different user agents? For example, if the current user is using an iPhone, they should be served mobile_index.html, whereas all other user agents should be served browser_index.html.

Found solution:

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;
    }
  }
}
summatix
  • 225
  • 1
  • 3
  • 6

1 Answers1

10

If you have a new enough version of nginx (0.9.6+), you could accomplish this with a map:

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

server {
  listen 80;
  root /var/www;

  location = / { rewrite ^ $myindex; }
}

If you don't need an internal redirect (which you probably don't if you're just serving static files for the indexes), you could add a 'break' flag to the rewrite and avoid the internal redirect.

EDIT: If you're using an older version, you could do something like this:

server {
  listen 80;
  root /var/www;

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

again, using the break flag if you don't need the internal redirect.

kolbyjack
  • 7,854
  • 2
  • 34
  • 29