bounty将在5天后过期。回答此问题可获得+50声望奖励。Eric_WVGG希望引起更多关注此问题。
我用Nextjs建了一个网站(使用版本12.1.4
).出于搜索引擎优化的目的,我想为我的网站的www
版本永久重定向到我的non-www
.通常这可以很容易地与nginx或.htaccess
文件与Apache完成.然而,在Digitalocean上托管的静态网站没有运行Apache或Nginx,所以.htaccess文件不会这样做。我已经读到这应该可以使用Nextjs redirects。
我尝试了以下3个重定向:
redirects: async () => [
{
source: '/:path*',
has: [
{
type: 'host',
value: 'www',
},
],
destination: '/:path*',
permanent: true,
},
],
---------------------------------------------------
redirects: async () => [
{
source: '/:path*/',
has: [
{
type: 'host',
value: 'www',
},
],
destination: '/:path*/',
permanent: true,
},
],
------------------------------------------------------
redirects: async () => [
{
source: '/:path*',
has: [{ type: 'host', value: 'https://www.cvtips.nl/' }],
destination: 'https://cvtips.nl/:path*',
permanent: true,
},
],
字符串
我不知道这是否相关,但我在配置中确实使用了trailingSlash: true
。
接下来我尝试添加一个中间件文件,我都尝试在根目录下添加并命名为middleware.js
,在pages文件夹中命名为_middleware.js
。
这是我用于重定向的代码:
--> https://github.com/vercel/next.js/discussions/33554
import { NextRequest, NextResponse } from 'next/server';
export function middleware(req: NextRequest) {
const host = req.headers.get('host');
const wwwRegex = /^www\./;
// This redirect will only take effect on a production website (on a non-localhost domain)
if (wwwRegex.test(host) && !req.headers.get('host').includes('localhost')) {
const newHost = host.replace(wwwRegex, '');
return NextResponse.redirect(`https://${newHost}${req.nextUrl.pathname}`, 301);
}
return NextResponse.next();
}
型
也根本不起作用...不起任何我相信的作用。
如何将Nextjs网站从www
重定向到non-www
?
1条答案
按热度按时间ipakzgxi1#
尝试删除
https://
,如果您在本地机器上测试它,您应该重新启动服务器。从Next.js 12开始,中间件在边缘运行,这意味着它在Vercel边缘网络或其他支持的平台上尽可能靠近用户执行。DigitalOcean托管Next.js应用程序的标准方法涉及使用DigitalOcean Droplet configured和Nginx作为反向代理。字符串