设置变量时,Nginx返回404

时间:2012-10-05 01:14:26

标签: php drupal nginx

我正在使用Nginx为Drupal网站和Boost提供服务。

到目前为止它一直运行良好,但最近我们添加了一个移动版本,我配置了boost / drupal来将移动版本缓存到另一个目录中,但是我正在试图配置Nginx来检查adecuate目录,如果设备是移动,但我得到404的一些页面,而其他人从来没有打过缓存的文件 我的位置@cache有这样的东西:

set $mobile_rewrite desktop;
if ($http_user_agent ~ (iPhone|Android) ) {
    set $mobile_rewrite mobile;
}
try_files /cache/normal/$mobile_rewrite/$host${uri}_$args.html /cache/$host${uri}_$args.html @drupal;

当使用移动用户代理访问首页时,我会获得移动版本的服务,但每次重新创建它(因此它会转到@drupal位置),如果我尝试在网站中进一步导航(使用移动设备)用户代理)我收到404错误

有什么想法吗?

我使用自定义错误和不同位置解决了它。

1 个答案:

答案 0 :(得分:0)

我终于解决了这个问题,为了做到这一点,我更改了方法,而不是尝试使用变量更改try_files指令,我这样做了:

设置“地图”以检查用户代理并确定是否为移动设备:

#Inside my http block
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 $mobile_device {
  1 0;
  0 1;
}

然后在我的服务器块中,在默认/位置:

error_page 418 = @mobile; #defined a new error page pointing to a @location  
    if ($mobile_device) { #checking for above variable/map if true, goes to @location defined in error
           return 418;
    }

这个新位置与之前的@cache完全相同,但指向另一个目录 希望它可以帮助别人!