为什么我的重定向()在NextJS不工作?



我做错了什么?我正在与NextJS建立一个可访问的网站,并希望重定向到适合的页面,以普通语言对应。但是由于它们是一种不同的语言,它们的url也不同。

我的路由是这样构建的:

  • 标准语言=my-website.com/about
  • Plain language =my-website.com/plain-language/about

我有一个开关可以改变/plain-language/部分

现在我有这些路由:

  • my-website.com/accessible-webdesign

  • my-website.com/plain-language/for-disabled-persons

如果我点击第一个开关,它会把我链接到my-website.com/plain-language/accessible-webdesign,这是不存在的!所以我使用redirects(),也重新启动我的服务器来解决这个问题,但它不起作用。它不重定向,我得到一个404就像以前。

你能检查一下我的代码并告诉我,我应该做什么修改才能使它正常工作吗?

谢谢!

这是我的next.config.js:

const withBundleAnalyzer = require('@next/bundle-analyzer')({
enabled: process.env.ANALYZE === 'true',
});
/** @type {import('next').NextConfig} */
const path = require('path');
const withPWA = require('next-pwa')({
dest: 'public',
disable: process.env.NODE_ENV === 'development',
sw: 'sw.js'
})

const nextConfig = {
async redirects(){
return[
{
source: '/plain-language/accessible-webdesign',
destination: '/plain-language/for-disabled-persons',
permanent: 'true'
}
]
},

reactStrictMode: true,
swcMinify: true,
trailingSlash: false,
webpackDevMiddleware: config => {
config.watchOptions = {
poll: 1000,
aggregateTimeout: 300
}
return config
},
sassOptions: {
includePaths: [path.join(__dirname, 'styles')]
},
experimental: {
images: {
layoutRaw: true
}
},
images: {
/*unoptimized: true - for static export!*/
/*deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],
formats: ['image/webp']*/
}

}
module.exports = withBundleAnalyzer(withPWA({nextConfig}));

我的工作解决方案是从这里:https://stackoverflow.com/a/58182678/

我放了一个中间件。在根文件夹中(就在package。Json, next.config.js等).

我在里面写了:

import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';
export async function middleware(request: NextRequest) {
/* /accessible-webdesign --> /for-disabled-persons */
if (request.nextUrl.pathname.startsWith('/plain-language/accessible-webdesign')) {
return NextResponse.redirect(new URL('/plain-language/for-disabled-persons', request.url));
}
/* /another-url --> /another-redirect */
if (request.nextUrl.pathname.startsWith('/plain-language/another-url')) {
return NextResponse.redirect(new URL('/plain-language/another-redirect', request.url));
}
}

没有那么漂亮,但是很好用。

相关内容

  • 没有找到相关文章

最新更新