从nginx中重写执行排除文件夹

我有一个情况,我有domain.com以及一个单独的代码m.domain.com。 所以我检查用户是否从移动重写到m.domain.com否则访问常规domain.com,但我有一个文件夹domain.com/blog不应该redirect到m.domain.com,即使用户是从移动。 我尝试了所有'嵌套'的可能性,但失去了一些东西。 这是我所尝试过的。 任何帮助深表感谢

我的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 */ 

与此configuration:当用户从移动login它redirect到m.domain.com,但如果用户试图从移动访问domain.com/blog然后它redirect到m.domain.com/blog但它应该redirect到m .domain.com /博客istead它应该在domain.com/blog

我会尝试这样的事情:

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

在这里,首先testing/blog位置,如果匹配,nginx直接服务博客。

否则,nginx使用/ location,在那里我们testing移动用户代理,并执行redirect,如果用户代理包含所需的string。

我认为你需要添加位置到你的configuration,而不是在服务器中使用一个。 这可能不太合适,可能会进行优化,但应指向正确的方向。

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