将域重定向到具有语言子文件夹的新域

Redirect domain to the new one with language subfolder

我的网站重定向有问题。几天前我买了一个 .com 域名。有两种语言:意大利语和德语。德文网站设置于 example.de,英文版设置于 example.it

现在我将其更改为 .com 域:example.com 子文件夹:example.com/it/example.com/it/.

如何将所有链接从 example.it 重定向到 example.com/it/ 并将 example.de 重定向到 example.com/de/

...和以下子文件夹。

我正在尝试

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^example\.de$ [NC]
RewriteRule ^(.*)$ https://example.com/de/ [R=301,L]

但是没有成功。

RewriteCond %{HTTP_HOST} ^example\.de$ [NC]
RewriteRule ^(.*)$ https://example.com/de/ [R=301,L]

RewriteRule 模式 中捕获了 URL 路径后,您在 替换 [=] 中缺少相应的反向引用56=] 字符串,所以这会将所有内容重定向到主页,即。 example.de/<url>example.com/de/ - <url> 丢失了。

但是,您可以使用一个规则处理两个 TLD。由于顶级域名与子目录相同。

我假设所有三个域都解析到同一个地方。

在根 .htaccess 文件中尝试以下操作:

RewriteCond %{HTTP_HOST} ^example\.(de|it) [NC]
RewriteRule (.*) https://example.com/%1/ [R=301,L]

%1 反向引用是指从前面的 CondPattern 捕获的 TLD。 </code> 反向引用包含在 <code>RewriteRule 模式 .

中捕获的 URL 路径

此处不需要 RewriteBase 指令。

使用 302(临时)重定向进行测试以避免缓存问题。您需要在测试前清除浏览器缓存,因为错误的 301(永久)重定向将被缓存。


UPDATE#1: This is Polylang plugin for Wordpress.

在这种情况下,此重定向指令必须位于 .htaccess 文件的最顶部,位于任何现有 WordPress 指令之前,包括 # BEGIN WordPress 注释标记之前。


UPDATE#2: I also have .cz domain and subfolder is /cs (ISO standard)

由于 TLD 和子目录不同,您需要添加另一条规则来处理此问题。 (这可以在上述规则之前或之后,因为没有冲突。)

例如:

RewriteCond %{HTTP_HOST} ^example\.cz [NC]
RewriteRule (.*) https://example.com/cs/ [R=301,L]