hi ARAM

站点怎么去掉URL中.html资源后缀的

2023/02/15

站点是用 never-write 驱动的,但是这个工具生成的是一个静态资源站点,也就是说所有资源都是直接访问到文件的。

那就意味着每一个URI都是很精确到到文件,HTML文件就会带上后缀。

问题是没什么问题,但是有个后缀在就是比较难受,就想着把.html后缀去掉。

因为站点的部署是使用NGINX的,所以直接改NGINX配置:

location / {
  root 静态资源路径;
  index index.html index.htm;

  # 这个判断文件是否存在
  if (!-e $request_filename){
    # 重写,加个后缀
    rewrite ^(.*)$ /$1.html last;
    break;
  }
}

其实这段时网上扣的,核心的!-e $request_filename这一段逻辑,这段逻辑其实可以优化。

这样就可以不带后缀访问,会被自动补上.html

但是还有一个问题,内链还是有 .html 后缀的。

这个可以通过修改 never-write 的EJS模板,或者通过钩子修改资源的路径,在输出时候把后缀去掉就可以实现。

这个是从 NGINX 角度的,如果是用 Node ,或者其他提供静态资源服务,做法也类似。

比如在 Koa:

app.use((ctx, next) => {
  if (ctx.url.endsWith('.html')) {
    await next();

    return;
  }

  ctx.url = `${ctx.url}.html`;
});

逻辑是随手写的,不一定对,大概是这个意思。


上一篇:老系统在不丧失服务端渲染特性的情况下进行渐进重构
下一篇:如何在SSR项目中减少访问window的心智负担