我遇到过这种情况,我有 domain.com 以及 m.domain.com 的单独代码。因此,我检查用户是否来自移动设备,重写为 m.domain.com,否则访问常规 domain.com,但我有一个文件夹 domain.com/blog,即使用户来自移动设备,也不应该重定向到 m.domain.com。我尝试了“嵌套 if”的所有可能性,但遗漏了一些东西。以下是我尝试过的方法。任何帮助都非常感谢
我的 nginx.conf
server {
listen 80;
server_name domain.com;
rewrite ^(.*) http://www.domain.com$1 permanent;
}
server {
listen 80;
server_name www.domain.com;
set $mobile_rewrite do_not_perform;
if ($request_uri !~ "^/blog/\w+$")
{
set $mobile_rewrite do_not_perform;
}
if ($http_user_agent ~* "(android|bb\d+|meego).+mobile||iemobile|ip(hone|od)||up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino") {
set $mobile_rewrite perform;
}
if ($mobile_rewrite = perform) {
rewrite ^ http://m.domain.com$request_uri? redirect;
break;
}
root /var/www/public_html/;
index index.php;
location / {
try_files $uri $uri/ /index.php?$args;
}
location /blog {
try_files $uri $uri/ /blog/index.php?$args;
}
/* and there m.domain.com configuration lines also */
使用以下配置:当用户从移动设备登录时,它会重定向到 m.domain.com,但如果用户尝试从移动设备访问 domain.com/blog,那么它会重定向到 m.domain.com/blog,但它应该重定向到 m.domain.com/blog,而应该在 domain.com/blog
答案1
我会尝试这样的事情:
server {
listen 80;
server_name www.domain.com;
location /blog {
try_files $uri $uri/ /blog/index.php?$args;
}
location / {
if ($http_user_agent ~* "(android|bb\d+|meego).+mobile||iemobile|ip(hone|od)||up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino") {
rewrite ^ http://m.domain.com$request_uri? redirect;
}
try_files $uri $uri/ /index.php?$args;
}
root /var/www/public_html/;
index index.php;
}
这里/blog
首先测试位置,如果匹配,nginx 就直接为博客提供服务。
否则,nginx 将使用该/
位置,我们在其中测试移动用户代理,如果用户代理包含所需的字符串,则执行重定向。
答案2
我认为您需要在配置中添加位置,而不是仅在服务器中使用一个位置。这可能不太有效,可能需要优化,但应该会为您指明正确的方向。
server {
listen 80;
server_name www.domain.com;
set $mobile_rewrite do_not_perform;
if ($request_uri !~ "^/blog/\w+$") {
set $mobile_rewrite do_not_perform;
}
if ($http_user_agent ~* " android|bb\d+|meego).+mobile||iemobile|ip(hone|od)||up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino") {
set $mobile_rewrite perform;
}
location /blog {
root /var/www/public_html/;
index index.php;
}
location / {
if ($mobile_rewrite = perform) {
return 302 http://m.domain.com$request_uri?;
break;
}
root /var/www/public_html/;
index index.php;
}