我的网站重定向有问题。几天前我买了一个.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]