如何在 Next.js 应用程序中的某个 URL 处提供“.html”?

Rub*_*uby 10 reactjs next.js next-router

我有一个“.html”文件,我需要在 Next.js 应用程序中的某个路径中提供该文件,如下所示......

/pages/customr-route-name/my-html-file.html

因此,如果我访问我的网站并输入内容,http://example.com/custom-route-name/my-html-file.html我就可以看到它

我怎样才能在 Next.js 中做到这一点?

Mik*_*ues 7

这需要 API 路由和 URL 重写才能工作。令人高兴的是,您也可以将此模式用于其他用途(例如,如果您想生成 RSS 提要或 sitemap.xml)。

注意:您需要运行 Next 9.5 才能正常工作。

0. 移动 HTML 文件(可选)

您的文件不需要位于该./pages目录中。让我们把它放进去./static。稍后只需将这些路由文件占位符替换为您的真实文件名即可:./static/<route>/<file>.html

1.创建API路由

接下来,您可以创建类似于 Express 等旧式主机中的API 路由。任何名称都可以,只要它在./pages/api. 我们将称之为./pages/api/static/<route>/<file>.js

// import

import fs from 'fs';

// vars

const filename = './static/<route>/<file>.html';

// export

export default async function api(req, res) {
  res.setHeader('Content-Type', 'text/html; charset=utf-8');
  res.write(await fs.readFileSync(filename, 'utf-8'));
  res.end();
}

Run Code Online (Sandbox Code Playgroud)

2.添加重写next.config.js

在 Next 中,重写的工作方式与 apache 的对应部分类似。他们将 url 位置映射到 Next ./page

// export

module.exports = {
  rewrites: async () => [
    {source: '/<route>/<file>', destination: './pages/api/static/<route>/<file>'},
  ],
};
Run Code Online (Sandbox Code Playgroud)

3.运行它!

您应该能够使用常规的next dev. 当然,更改要求next.config.js您手动重新启动开发服务器。

如果您查看 Next 文档,您会发现您可以在 API 路由和这些重定向中使用通配符,这可能有助于您前进的方向。