我的网站结构是这种
//域名 /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 页面了,写在最后优先级也好像是最高的,像这种情况要怎么处理比较好
1
wly19960911 2018-12-16 09:43:05 +08:00 via Android 2
个人认为,你这个活是路由的问题,用 Nginx 强制当路由有点不妥。
我们来分析下,你那个 location 是为了访问不存在的静态文件时,去新建页面。那么好了,静态文件和后端页面的 URL 没什么差别的话,就直接 try files 就可以了,没必要一大串的。另外设置 location 为 /w/ 然后后面那个…其实正则也可以做到 只需要 location ~* /[^w]/ 就可以了 强行去一个页面。 |
2
RiESA OP @wly19960911 #1 受教了,我等会再尝试修改一下
|
3
RiESA OP @wly19960911 #1 成功了,多谢大佬
|
4
wly19960911 2018-12-16 13:45:33 +08:00
@RiESA #3 我想了一下,我有个地方可以优化下,可以直接用 location / + 'try_files $uri $uri/ /404.php' 就跳到 404 页面去(其实就是模拟空路由的情况)。
你可以看一下 nginx location 的优先级,通过优先级去排除,正则是最高的优先级,所以正则肯定比 / 优先, 匹配不到你那个 /w 的规则才会进 / 的规则,至于怎么好理解,实现方不方便,我这里只给一个参考意见了。反而用 [^w] 不够好 |