使用 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;
}
}
再次,如果不需要内部重定向,请使用中断标志。