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



我的网站重定向有问题。几天前我买了一个.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路径后,在替换字符串中缺少相应的反向引用,因此这将把所有内容重定向到主页,即example.de/<url>example.com/de/-<url>丢失。

但是,您可以用一条规则同时处理这两个TLD。由于TLD与子目录相同。

我假设所有三个域都解析到同一个位置。

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

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

%1反向引用是指从前面CondPattern捕获的TLD。并且$1反向引用包含在RewriteRule模式中捕获的URL路径。

此处不需要RewriteBase指令。

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


更新#1:这是Wordpress的Polylang插件。

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


更新#2:我还有.cz域,子文件夹是/cs(ISO标准(

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

例如:

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

最新更新