.htaccess - 将域重定向到带有语言子文件夹的新域

标签 .htaccess url redirect mod-rewrite subdomain

我的网站重定向出现问题。几天前,我购买了一个 .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/

相关文章:

.htaccess - 如何将站点重定向到新站点

php - 如果给定目录,htaccess 停止处理

apache - 来自其他站点的错误 url ?fb_xd_fragment= redirect

iphone - URLWithString : returns nil

android - 如何从 Fragment TextView 打开 URL?

php - Laravel - 清除重定向::意图()

python - 将 javascript 添加到 Django 重定向 (HttpResponse)

php - htaccess 重写规则是否重定向到文件

apache - .htaccess 不适用于 Windows

wordpress - 高级 HTACCESS 子域重定向(foo.dom2.com 到 foo.dom1.com)