1

我正在尝试nginx使用由react-router. 一切正常,直到我尝试在第二级 uri 上 F5 example.com/MyApp/users

我的静态资源在example.com/MyApp/resources. example.com/MyApp/users/resources问题是,每当我尝试直接访问(或 F5)users视图时,nginx 都会尝试加载我的资源。

这是我的 nginx 配置:

location ~ ^/MyApp/ {
    try_files $uri /MyApp/index.html last;
}

我是 nginx 的新手,所以我真的不知道一切是如何工作的......

编辑 :

我将我的 conf 更改为:

location / {
    if (!-e $request_filename){
        rewrite ^(.*)$ /MyApp/index.html break;
    }
}

现在访问example.com/MyApp/users作品但example.com/MyApp/users/没有。

4

2 回答 2

2

使用客户端应用程序路径:

/
/foo
/foo/bar
/foo/bar/baz
/foo/bar/baz/123
/tacos
/tacos/123

使用 nginx 配置:

server {
    listen 80;
    server_name example.com;
    root /var/www/example.com;

    gzip_static on;

    location / {
      try_files $uri $uri/ /index.html;
    }

    # Attempt to load static files, if not found route to @rootfiles
    location ~ (.+)\.(html|json|txt|js|css|jpg|jpeg|gif|png|svg|ico|eot|otf|woff|woff2|ttf)$ {
      try_files $uri @rootfiles;
    }

    # Check for app route "directories" in the request uri and strip "directories"
    # from request, loading paths relative to root.
    location @rootfiles {
      rewrite ^/(?:foo/bar/baz|foo/bar|foo|tacos)/(.*) /$1 redirect;
    }
}

此配置将在 pushState“目录”中工作,例如,example.com/foo/bar/baz/213123并以相对路径解析静态文件,例如js/app.jstoexample.com/js/app.js而不是example.com/foo/bar/baz/js/app.js.

对于目录深度超出第一级的情况,例如/foo/bar/baz,请注意在 @rootfiles 指令中声明的目录的顺序:最长可能的路径需要先走,然后是下一个较浅的路径/foo/bar,最后是/foo.

请参阅有关 Backbone 的类似问题的相关答案。

于 2015-06-02T04:26:45.090 回答
0

我认为你将不得不做这样的事情:

location ~ ^/MyApp/ {
    # First attempt to serve request as file, then
    # as directory, then fall back to displaying a 404.
    try_files $uri $uri/ /index.html =404;
}
location ~ ^/MyApp/resources {
    # First attempt to serve request as file, then
    # as directory, then fall back to displaying a 404.
    try_files $uri $uri/ /resources/index.html =404;
}
于 2014-12-04T13:49:35.550 回答