使nginx为PC和移动设备加载不同的位置

时间:2013-06-08 21:28:14

标签: nginx

我想让PC和移动设备加载不同索引的文件。

所以,在nginx主“位置”之前,我尝试像这样创建一个“if”:

# START MOBILE
if ($http_user_agent ~* "(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino") {
    location / {
        try_files /my/dir/here/index-mobile.html $uri $uri/ /index.php ;
    }    
}

但是,我得到“nginx:[emerg]”位置“指令不允许在这里”。因为在if中不允许位置,为了实现nginx为不同条件提供不同文件的方向是什么?

1 个答案:

答案 0 :(得分:1)

问题如下所示:location内不允许使用if指令。在if指令中实际上只有一些安全的事情可做,例如rewritereturn。有关更详细的information,请参阅文档。文档中没有提及的是,在某些条件下set也可以安全使用。

在您的具体情况下,请尝试以下方法:

if ($http_user_agent ~* android) {
    rewrite ^ /mobile/$request_uri last; # internal rewrite
}

location /mobile {
}

请注意,我尚未验证您的正则表达式。我相信你可以根据自己的需要进行调整。