nginx:当root变量时try_files的最后一个值不起作用

时间:2019-12-19 07:44:08

标签: vue.js nginx

我有一个Vue项目,该项目使用“ try_files”配置来避免刷新“非根” URL时出现404错误,例如:

location / {
    ......
    root /web/pcResource;
    try_files $uri $uri/ /index.html;
}

工作正常。但是当我需要一个可变的“ root”值之前(由用户代理决定)时,像这样:

set $dir "/web/pcResource";
if ($http_user_agent ~* "(Android|iPhone|iPod|Symbian|BlackBerry|Windows Ph    one|Mobile|J2ME)") {
    set $dir "/web/mobileResource";
}
root   $dir;
location / {
    ......
    try_files $uri $uri/ /index.html;
}

try_files配置的“ /index.html”始终指向“ / web / pcResource”中的文件,因此在移动浏览器上刷新“非根” URL时出现404错误。 似乎try_files仅“记住” root的第一个值。当我先将$ dir设置为“ / web / mobileResource”,然后如果用户代理为pc时将其设置为“ / web / pcResource”,则会出现一个相反的错误:我可以在移动浏览器上刷新并在PC上出现404错误浏览器。 如果我想使用可变的根值,正确的配置是什么?

1 个答案:

答案 0 :(得分:0)

原因是我有此配置:

location / {
    if ($http_user_agent ~* "(Android|iPhone|iPod|Symbian|BlackBerry|Windows Phone|Mobile|J2ME)") {
        access_log   /var/log/nginx/xxmobile.log;
    }
    ........
}

“ access_log”选项不能在“ if”范围内,但是可以重新加载此配置,而不会出现错误消息。因此,删除此选项后即可使用。