nginx匹配某些路由上不同文件夹中的特定文件

时间:2016-04-30 16:18:10

标签: nginx nginx-location

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

下的所有博文
http://example.com/blog/

下的特定博客文章
http://example.com/blog/example-blog-post-title

现在我正在为搜索引擎优化目的预编译博客文章的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/下的博客帖子列表路由到我的主角应用程序,我在该URL上得到错误403.

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

如何才能使这两种情况都有效?

1 个答案:

答案 0 :(得分:1)

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

由于some known issues,我尽量避免在同一个区块中使用aliastry_files。您可以考虑在路径blog中创建最后一个目录,以便您可以使用root

我认为您的角度应用是/index.html,在这种情况下,您的try_files语句不正确。 $url/将导致/blog/index.html尝试index(假设您有index.html指令)并且/缺少前导location /blog { alias /home/ubuntu/bloghtml; try_files $uri.html /index.html; }

我建议你试试:

alias

但考虑设计出themes -> mytheme -> functions.php <?php function testfunc() { echo "Test Function"; exit; } add_action( 'init', 'testfunc' ); ?> 指令。