在nginx.conf上,我将所有桌面流量重定向到/desktop/index.html
,iPhone / Android访问权限定向到/index.html
。
在conf文件中,我使用“IF”和http_user_agent来确定iphone与桌面,但我注意到使用“If”是一种糟糕的写作方式。如何解决此问题,以便此重定向不使用ifs。
set $is_sphone 0;
if ($http_user_agent ~ iPhone) {
set $is_sphone 1;
}
if ($http_user_agent ~ Android) {
set $is_sphone 1;
}
location /index.html {
if ($is_sphone = 1) {
rewrite ^(.*)$ /index.html break;
}
if ($is_sphone != 1) {
rewrite ^(.*)$ /desktop/index.html break;
}
}
答案 0 :(得分:1)
如果您只想向不同的设备显示不同的静态index.html文件,您只需将文档根目录指向相应的文件夹,然后就不需要引入其他位置或进行重写。有几种方法可以做到,但在我看来map提供了最简单的方法。
从概念上讲,配置如下所示:
map $http_user_agent $root {
default "/path/to/desktop/folder";
"~*iPhone" "/path/to/mobile/folder";
"~*Android" "/path/to/mobile/folder";
}
server {
listen 80;
...
index index.html;
root $root;
}
顺便说一句,使用“if”并没有错,假设你知道它是如何工作的以及你在做什么。避免使用有用的工具只是因为它们在使用不当时会造成损害,这绝不是一个好主意。阅读有关此指令并将其用于您的利益会更加谨慎,而不是浪费时间试图找到不必要的解决方法。如果你浏览this article,你会发现“if”实际上是非常符合逻辑的,所有与之相关的问题都可以很容易地预测和避免。
<强>更新强>
如果要在不更改根文件夹的情况下显示不同index.html的内容,map仍然有用。在这种情况下,配置如下所示:
map $http_user_agent $index_folder {
default "/desktop";
"~*iPhone" "";
"~*Android" "";
}
server {
listen 80;
...
index index.html;
location /index.html {
try_files "${index_folder}/index.html" =404;
}
root /path/to/root/foler;
}