0

我想让 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 为不同条件提供不同文件的方向是什么?

4

1 回答 1

1

问题如下所示:该location指令不允许在if. if实际上,在指令中只有几件事是安全的,例如rewritereturn有关更多详细信息,请参阅文档。文档没有提到的是在某些条件下set也可以安全使用。

在您的特定情况下,请尝试以下操作:

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

location /mobile {
}

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

于 2013-06-08T22:38:02.843 回答