你可能会说:
- “为什么有的网址中间有一个 # 号?”
- “我新加了一个页面,为什么打开是 404?”
它是什么
每个请求来了,都要先经过路由,决定交给谁处理。静态网站常见的是文件路由:src/pages/blog/x 这样的文件位置就决定了网址 /blog/x;后端程序则在代码里逐条登记"这个路径交给这个函数"。
单页应用还多一层前端路由:换页时不向服务器要新页面,而是由浏览器里的 JavaScript 根据网址切换内容。一种常见写法是把路径放在 # 后面(井号路由),因为井号后面的部分不会发给服务器。
路由里最要紧的是最后一条:前面都没匹配上的请求怎么办。正确的做法是明确回答"没有这个页面"(404),而不是一律送回首页。
打个比方
像商场的楼层指引:顾客报出店名,指引牌告诉他去几楼哪个铺位。牌子上没有的店名,就该明确告诉他"没有这家"。
在这个网站里
这个网站用 Astro 的文件路由:src/pages/vibecoding/terms/[slug].astro 这一个文件,为每个术语各生成一个网址。原来的自动驾驶知识站用的是井号路由(#/term/bev),并入本站后,旧链接靠 /e2e 页面里的一小段脚本换成新地址:服务器根本看不到井号后面的部分。
容易搞混的地方
常见误解
网址里 # 后面的内容,服务器都能看到
正确理解
井号后面的部分只留在浏览器里,不会随请求发给服务器,所以服务器上的跳转规则处理不了它。
你可以这样告诉 AI
复制下面这段,贴给你的 AI
列出这个网站的全部路由:每个网址对应哪个页面或处理函数,哪些部分是动态参数;再告诉我一个不在列表里的网址会被怎么处理、返回什么状态码。
接下来去哪
接着看
- HTTP 状态码——服务器回应每个请求时附带的三位数字,告诉对方这次是成功、找不到,还是出错了。
- 重定向——服务器告诉访客"你要的东西在另一个地址",浏览器随即自动去新地址。
- 软 404——页面其实不存在,服务器却返回 200,让程序误以为这是一张正常页面。
在这些课里出现
相关的真实事故