我做错了什么?我正在与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));
}
}
没有那么漂亮,但是很好用。