NextJS 无法在域上禁用重定向

Posted

技术标签:

【中文标题】NextJS 无法在域上禁用重定向【英文标题】:NextJS cannot disable redirect on domain 【发布时间】:2021-12-16 01:47:35 【问题描述】:

我有以下 next-i18next.config.js 文件

 module.exports = 
  i18n: 
    locales: ["en", "de-DE", "fr"],
    defaultLocale: "en",
    localeDetection: false,
    domains: [
      
        domain: "my-domain.com",
        defaultLocale: "en",
      ,
      
        domain: "my-domain.fr",
        defaultLocale: "fr",
        http: true,
      ,
      
        domain: "my-domain.de",
        defaultLocale: "de-DE",
        http: true,
      ,
    ],
  ,
;

我已将 localeDetection 设置为 false,但是当我将语言从 en 更改为 fr 时,我的应用程序被重定向到 http://my-domain.fr

我的 next.config.js 如下

const  i18n  = require("./next-i18next.config");

module.exports = 
  i18n,
;

我错过了什么吗?

【问题讨论】:

你的 next.config.js 文件是什么样子的? 我更新了我的问题。谢谢你 更改语言是什么意思?您在应用状态下更改语言? 【参考方案1】:

我认为您对区域设置检测的确切作用没有正确的理解。

区域设置检测将根据用户的语言偏好自动将用户重定向到正确的区域设置网站/页面。似乎困扰您的是您的语言环境设置为特定域,因此您的下一个路由器将始终将您重定向到与您的语言环境关联的域。所以这是预期的行为。

将语言环境检测设置为 false,您根本不会一开始就将用户重定向到他的首选语言环境。

【讨论】:

有道理马里奥。所以这是初始页面加载。之后,如果我重定向用户并更改本地,它也会更改域。对吗? i18n.changeLanguage('fr') 应该在 nextJS 上工作吗?因为什么都没有改变。我只能通过 router.replace 更改语言 如果您通过 router.push 或通过链接更改语言环境,它应该更改域。我不知道 i18next 库应该如何工作,所以无法帮助您。

以上是关于NextJS 无法在域上禁用重定向的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess 301 将旧域上的所有页面重定向到新域上的单个页面

htaccess 仅在域匹配时重定向

在 NextJS 中自动重定向的正确方法

使用 Apache 将旧域上的旧路径重定向到新域上的新路径

重定向到新域上的相同路径

同一站点的两个单独域上的重定向问题