想让不同的 URL 返回同一个页面应该怎么配置?

2017-10-13 12:14:13 +08:00
 lxy

现有如下配置(省略其它)

location ~* /user/view/\d+/$ {
    alias /path/to/dist/view/;
    index user_view.html;
    default_type "text/html";
}

location / {
    root /path/to/dist/;
    index  index.html index.htm;
    default_type "text/html";
    try_files $uri.html $uri $uri/  =404;
}

预期是访问 localhost/user/view/123/ 时,应当返回我设置的 index 页面,即 /path/to/dist/view/目录下的 user_view.html。

但结果是 404。

打开 nginx debug 日志。摘要如下

(前略)
[debug] 4000#2380: *1 test location: "/"
[debug] 4000#2380: *1 test location: ~ "/user/view/\d+/$"
[debug] 4000#2380: *1 using configuration "/user/view/\d+/$"
(中略)
[debug] 4000#2380: *1 http script copy: "/path/to/dist/view/"
[debug] 4000#2380: *1 open index "/path/to/dist/view/user_view.html"
[debug] 4000#2380: *1 internal redirect: "/user/view/123/user_view.html?"
[debug] 4000#2380: *1 rewrite phase: 1
[debug] 4000#2380: *1 test location: "/"
[debug] 4000#2380: *1 test location: ~ "/user/view/\d+/$"
[debug] 4000#2380: *1 using configuration "/
(后略)

可以看到,先匹配到了正确的正则路径,而且 open index 也找到了我设置的默认页面,之后突然一个 internal redirect 重定向,最后匹配到不相关的 / 。

实在搞不懂为什么……

2327 次点击
所在节点    NGINX
2 条回复
0ZXYDDu796nVCFxq
2017-10-13 12:57:29 +08:00
alias 使用正则的话,必须要捕获正则并用在 alias 中
fenglangjuxu
2017-10-13 13:40:02 +08:00
加 break 试试

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/397321

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX