我正在尝试弄清楚如何根据 URL 中的语言切换/重定向到另一个域。
我有一个使用两个域名 domain1.tld 和 domain2.tld 的网站。该网站使用 WPML 在 wordpress 上,URL 格式如下:domain1.tld/en-US/page1 domain2.tld/es-ES/page1
目前糟糕的解决方案:为了避免搜索引擎的一些麻烦,我在 index.php 中放入了一个重定向到与语言关联的域的脚本。但是每次更新 wordpress 时,我都必须重写该文件。
如何在 Nginx 中将域名与语言关联? 我的意思是,如果访问者访问 domain1.tld/es-ES/page1,他应该被重定向到 domain2.tld/es-ES/page1。
我需要实现这一点,因为各个国家的商标并不相同。所以我需要将一种或多种语言链接到一个域名。
稍微澄清一下,该网站按语言划分,即 /fr-CA/pages、/fr-FR/pages、/en-US/pages、/en-CA/pages、/es-ES/pages 等。
当访问者到达网站时,他会通过域名重定向到基本语言。domain1.tld/ 默认重定向到 domain1.tld/en-US/home,domain2.tld/ 重定向到 domain2.tld/fr-CA/acceuil
他的浏览器语言没有被重定向。
如果他决定更改网站语言,域名可能会根据他选择的语言而更改。
网站上的每种语言都与一个域名相关联。因此,每个域名都可以链接到一种或多种语言。
如果访问者请求 domain1.tld,他将被重定向到 domain1.tld/en-US。如果他现在从下拉菜单中想要美国西班牙语,他将被重定向到 domain1.tld/es-US/。如果他再次更改并想要加拿大法语,他将被重定向到 domain2.tld/fr-CA/,因为 fr-CA 链接到 domain2.tld
我正在寻找这样的东西:
location ~* /(es-ES|fr-FR/fr-CA)/ {
# if user is on domain1.tld, redirect to domain2.tld
}
location ~* /(es-US|en-CA|en-US)/ {
# if user is on domain2.tld, redirect to domain1.tld
}
我想检测 URL 路径中的语言并重定向到与该语言链接的域。
我知道这有点复杂,但这就是营销的事情,我无法避免。
谢谢。
答案1
根据澄清的要求更新了答案。这是建立网站的一种相当奇怪的方式。我的第一个建议是采用更合理的结构,所有网站都在一个域中,并让您的应用程序在网站之间重定向用户。这应该很简单,但出于我们不需要讨论的原因,这可能不是一个选择。
你实际问题的答案似乎相当简单。你自己已经完成了大部分工作,你只需要像这样的东西
location ~* "/(es-ES|fr-FR)" {
return 302 https://example.com/abcd;
}
它没有通配符,因为您没有要求它,但如果您需要它们,您应该能够自己解决。
另一个选项是使用重写指令,它不会更改浏览器中的 URL,但会显示您想要的内容。但我不认为这是您想要的。
当问题表明他们想根据用户的语言进行重定向时,这是一个旧的答案。
您的问题可以通过 Google 搜索“基于用户语言的 nginx 重定向”得到解答。第一个搜索结果给出了一个很好的答案,这里. 还有另一种选择这里,但它使用了 if ,而你真的应该尽可能避免这种情况。还有另一个例子这里。