0

我有一个 angularjs 应用程序,它也有一个博客。此网址显示所有博客文章

http://example.com/blog/

以及具体的博文下

http://example.com/blog/example-blog-post-title

现在我正在为 SEO 目的预编译博客文章的 HTML,我想将它们与我的主应用程序完全分开,如下所示:

...
root "/home/ubuntu/client/public";

location / { ## Handle default requests ##
    try_files $uri $uri/ /index.html; 
}

location /blog { ## serve precompiled blog HTML
    alias /home/ubuntu/bloghtml;
    try_files $uri.html $uri/ index.html;
}
...

这有效,通过转到http://example.com/blog/example-blog-post-title nginx 成功地提供文件 /home/ubuntu/bloghtml/example-blog-post-title.html

但是问题是,在这种情况下,nginx 没有正确地将http://example.com/blog/下的博客文章列表路由到我的主要 Angular 应用程序,我在该 URL 上收到错误 403。

我尝试在 conf 文件中更改location /bloglocation /blog/,这使得http://example.com/blog/工作,但是我在http://example.com/blog/example-blog-post-title上得到 404 错误

我怎样才能使这两种情况都有效?

4

1 回答 1

1

如果您将位置从 更改为/blog,则/blog/需要记住将别名从 更改/home/ubuntu/bloghtml/home/ubuntu/bloghtml/。别名和位置需要有相同的结尾,否则计算的路径名是错误的。

由于一些已知问题,我尽量避免在同一块中使用alias和。您可能会考虑在路径中创建最后一个目录,以便您可以使用它。try_filesblogroot


我认为您的 Angular 应用程序是/index.html,在这种情况下您的try_files陈述不正确。这$url/将导致它尝试/blog/index.html(假设您有一个index有效的指令)并且index.html缺少前导/.

我建议你试试:

location /blog {
    alias /home/ubuntu/bloghtml;
    try_files $uri.html /index.html;
}

但也考虑设计出alias指令。

于 2016-05-02T13:20:26.987 回答