使用 .htaccess 将网站语言突变重定向到不同域上的等效语言

Redirect website language mutations to their equivalents on different domain using .htaccess

我有一个使用域名 foo.cz 的 (Joomla) 网站。

此网站具有以下结构的语言变体:

foo.cz/music (the default CZ language has no specific directory)
foo.cz/en/music
foo.cz/fr/music
foo.cz/de/music
foo.cz/es/music
foo.cz/ru/music

现在我注册了新域 bar.com,我想保持 .cz 网站原样(对于捷克用户),但我需要从其语言突变永久重定向到它们在 bar.com 上的等效项,因此重定向应该是:

foo.cz/music -> do nothing, no redirect, stay where you are!!!
foo.cz/en/music -> bar.com/en/music
foo.cz/fr/music -> bar.com/fr/music
foo.cz/de/music -> bar.com/de/music
foo.cz/es/music -> bar.com/es/music
foo.cz/ru/music -> bar.com/ru/music

请注意,两个域都指向相同的位置,即服务器上的相同文档根目录,因此在物理上,我仍然有一个站点、一个数据库,托管在一个确切的位置。

我想使用 .htaccess 文件来做到这一点,以某种巧妙的方式避免某些 SEO 和 Google 页面排名损坏。这意味着 .cz 默认语言站点内容将保持原样编入索引,其他语言变体将在新域 bar.com.

下重新编入索引

两个网站都 运行 超过 https

我在 .htaccess 中尝试过这样的事情:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^(www\.)?foo\.cz$ [NC]
RewriteRule ^ http://bar.com%{REQUEST_URI} [L,NE,R=301]

...但它没有用...我不想重定向所有内容,只想重定向语言突变。那么我应该在 RewriteCond 中指定语言目录吗?如何?或者有更好的解决方案吗?还是我想错了,这不可能仅仅因为两个域的托管相同?非常感谢您的帮助!

您必须使您的模式匹配起始语言,否则 ^ 将重定向所有内容。

您可以使用:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^(?:www\.)?foo\.cz$ [NC]
RewriteRule ^[a-z]{2}/ http://bar.com%{REQUEST_URI} [L,NE,R=301]

[a-z]{2}/ 将匹配任意 2 个小写字母后跟 /.

如果您只想匹配某些特定语言,那么这也应该有效:

RewriteCond %{HTTP_HOST} ^(?:www\.)?foo\.cz$ [NC]
RewriteRule ^(?:en|fr|de|es|ru)/ http://bar.com%{REQUEST_URI} [L,NE,R=301]

确保在新浏览器中测试此更改以避免旧缓存。