0

我正在为我的移动网站的根目录获取 404。我的浏览器检测代码会查找移动用户-aget,设置可变标头和 301 到移动站点。

这是主站点配置

server {
  listen 80;
  server_name www.mydomain.com;
  location / {
    if ( $is_mobile) {
      add_header Vary "User-Agent";
      return 301 $scheme://m.mydomain.com$request_uri;  
    }
}

这是移动站点配置

server {
  listen 80;
  server_name m.mydomain.com;
  root /var/www/mobile;
  index index.html;

  location / {
    try_files $uri $uri/ @dynamic;
  }

  location @dynamic {
    rewrite ^/(.*)$ /index.html last;
   }      
}

我正在使用 FireFox Override User Agent 扩展进行测试。如果我去 www.mydomain.com 应用程序正确加载。但是,当我切换到移动浏览器时 Nginx 404s。

Nginx 200s 用于手动输入的页面 -

http://m.mydomain.com/index.html
http://m.mydomain.com/about.html
http://m.mydomain.com/pricing.html

由于 index 和 root 都设置了,站点不应该将http://m.mydomain.com/指向http://m.mydomain.com/index.html吗?

如果不是,最好的标准化方法是什么?

更新:为移动检测添加了配置

这是我在主 nginx.conf 文件中用于移动检测的配置

map $http_user_agent $is_desktop {
default 0;
        ~*linux.*android|windows\s+(?:ce|phone) 0; # exceptions to the rule
        ~*spider|crawl|slurp|bot 1; # bots
        ~*windows|linux|os\s+x\s*[\d\._]+|solaris|bsd 1; # OSes
}


map $is_desktop $is_mobile {
        1 0;
        0 1;
}
4

2 回答 2

0

看不出有什么不对。我在我的 devbox 中尝试了您的配置文件,它成功了:请求被重定向到 m.mydomain.com 并提供了 index.html。

所以可能是其他原因导致了这个问题。你是如何设置 $is_mobile 的?也许设置 $is_mobile 有一些副作用,如果 nginx 没有选择您问题中的块来服务移动请求。您的移动请求进入了另一个不知道如何处理的位置块。

于 2013-03-30T23:07:25.693 回答
0

在 sites-available 中有一个名为 1 的文件,它被符号链接到 site-enabled。不确定它是如何到达那里的,但我取消链接并删除了它,重新启动了 Nginx,并且 / 现在正确解析为 index.html。很奇怪。

于 2013-03-31T11:45:44.883 回答