使用 nginx 为特定用户代理提供不同的文件

使用 nginx 为特定用户代理提供不同的文件

使用 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;
    }
  }
}

答案1

如果你有足够新的 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; }
}

如果您不需要内部重定向(如果您仅为索引提供静态文件,则可能不需要),您可以向重写添加“中断”标志并避免内部重定向。

编辑:如果您使用的是旧版本,您可以执行以下操作:

server {
  listen 80;
  root /var/www;

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

再次,如果不需要内部重定向,请使用中断标志。

相关内容