重写指的就是不改变原来请求的地址,但是使用另外的地址作响应。
新建一个页面,放在 app/variation/about 的下面,名字是 page.tsx。
复制一下 about 这个页面文件里的东西,把它粘贴到新创建的这个页面文件里。修改一下这个 variation 里的 about 页面,比如在这行文字的最后添加一个表情符号。
现在我想让用户在访问 /about 这个地址的时候,显示的是 /variation 里的那个 about页面。这种情况我们就可以在中间件里使用重写功能。
在中间件里判断一下 pathname 是否等于 /about , return 的东西用一下 NextResponse.rewrite ,给它提供一个 URL,新建一个 URL,路径名是 /variation/about,基本地址是 request.url。
这样如果有用户访问的是 /about 这个地址,得到的响应其实是 /variation/about 这个页面。
在浏览器上测试一下,访问 /about 这个地址,你会发现这个关于页面的内容里面多了一个表情符号。说明这个页面内容并不是原本的关于页面,而是 variation 里的那个 about 页面。