从www到移动网站的nginx 301导致404

时间:2013-03-30 20:20:10

标签: mobile nginx rewrite

我的移动网站的根目录是404。我的浏览器检测代码会查找移动用户帐户,将不同的标头设置为301,并将301s设置为移动网站。

这是主站点配置

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覆盖用户代理扩展程序进行测试。如果我去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

由于设置了索引和根目录,站点不应该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;
}

2 个答案:

答案 0 :(得分:0)

没有错。我在我的devbox中尝试了你的配置文件并且它有效:请求被重定向到m.mydomain.com并且index.html已经提供。

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

答案 1 :(得分:0)

在可用的站点中,有一个名为1的文件已被符号链接到启用了站点。不确定它是如何到达但我取消链接并删除它,重新启动Nginx,和/现在正确解析为index.html。很奇怪。