我的网站重定向出现问题。几天前,我购买了一个 .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(永久)重定向将被缓存。
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/$1 [R=301,L]
关于.htaccess - 将域重定向到带有语言子文件夹的新域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70084125/