如何防止在使用重写时直接访问nextjs中的页面url



我的问题是:我的项目中有pages/blog.js文件。我在next.config.js文件中做了如下所示的本地化URL。

i18n:{
locales:["tr","en"],
defaultLocale:"tr"
},
async rewrites(){
return [
{
"source":"/tr/makaleler",
"destination":"/blog",
"locale":false
},
{
"source":"/en/articles",
"destination":"/blog",
"locale":false
}
]
}

它有效。但问题是;我仍然可以用这个localhost:3000/blog访问。我想让它只能用localhost:3000/makalelerlocalhost:3000/en/articles访问。

有什么办法做到这一点吗?我读过";nextjs";文档bu找不到任何有用的东西。

本质上你想要的是不可能的,原因是如果你以任何方式限制对localhost:3000/blog的访问,那么你的rewrites也将停止工作。

您可能需要的是从localhost:3000/blog到用户所需的语言环境的redirects。您可以利用Accept-Language标头,例如:

async redirects() {
return [
{
source: '/blog',
has: [
{
type: 'header',
key: 'accept-language',
// header starts with tr
value: 'tr(.*)',
},
],
destination: '/tr/makaleler',
permanent: false,
},
{
source: '/blog',
has: [
{
type: 'header',
key: 'accept-language',
// header does not start with tr
value: '((?!tr$).*)',
},
],
destination: '/en/articles',
permanent: false,
},
]
}

如果你想实现基于语言(或任何东西(的复杂重定向逻辑,你应该在12.2版本中使用Next.js中间件。你可以在Youtube上找到Vercel的快速教程:https://youtu.be/j7rPSS9Ovsw?t=296

最新更新