请教一个 Nginx 的问题,有关 404 页面的

2018-12-16 02:57:04 +08:00
 RiESA

我的网站结构是这种

//域名 /index.php?title=首页

然后做了伪静态变成了

//域名 /w/首页

然后由于是 wiki 网站,输入不存在的页面时会提示是否新建页面

//域名 /w/不存在的页面 → 询问是否新建该页面

这个是用如下这段实现的 location ~* .(js|css|png|jpg|jpeg|gif|ico|mp3|ogg|doc|xls|pdf|ppt|tiff|bmp|docx|xlsx|pptx|ogx|wav|csv|pdf|bmp)$ { try_files $uri /index.php; expires max; log_not_found off; }

如果是输入

//域名 /X/首页 → 返回 404 页面,X=非 W 的值

以上是目前的情况,然后主要目前是直接返回 Nginx 默认的 404 页面有点难看,我希望一个自定义一个 404 页面,同时又不影响新建页面

但是如果用 error_page 404 /XXX.html;来指定一个页面的话

//域名 /w/不存在的页面 → 这样也变成返回 404 页面了,写在最后优先级也好像是最高的,像这种情况要怎么处理比较好

1123 次点击
所在节点    问与答
4 条回复
wly19960911
2018-12-16 09:43:05 +08:00
个人认为,你这个活是路由的问题,用 Nginx 强制当路由有点不妥。

我们来分析下,你那个 location 是为了访问不存在的静态文件时,去新建页面。那么好了,静态文件和后端页面的 URL 没什么差别的话,就直接 try files 就可以了,没必要一大串的。另外设置 location 为 /w/

然后后面那个…其实正则也可以做到 只需要 location ~* /[^w]/ 就可以了 强行去一个页面。
RiESA
2018-12-16 11:06:54 +08:00
@wly19960911 #1 受教了,我等会再尝试修改一下
RiESA
2018-12-16 11:39:05 +08:00
@wly19960911 #1 成功了,多谢大佬
wly19960911
2018-12-16 13:45:33 +08:00
@RiESA #3 我想了一下,我有个地方可以优化下,可以直接用 location / + 'try_files $uri $uri/ /404.php' 就跳到 404 页面去(其实就是模拟空路由的情况)。

你可以看一下 nginx location 的优先级,通过优先级去排除,正则是最高的优先级,所以正则肯定比 / 优先, 匹配不到你那个 /w 的规则才会进 / 的规则,至于怎么好理解,实现方不方便,我这里只给一个参考意见了。反而用 [^w] 不够好

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

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

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

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

© 2021 V2EX