htaccess将子域重定向到目录

时间:2018-04-04 15:01:18

标签: .htaccess redirect subdomain

我需要帮助在htaccess文件中编写正确的重写规则。

我需要将fr.example.com之类的内容重定向到example.com/fr,因为我们最近更改了整个网站,并对多语言系统进行了不同的管理。结构和页面也是如此。

我设法用这段代码成功地做到了这一点:

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

我现在的问题是为页面编写更具体的内容,例如:

fr.example.com/discover/foo应该转到example.com/fr/bar/foo(不同的路径,没有任何一致性)

但是! example.com/discover/foo应该转到example.com/bar/foo(网址的结尾与英语和法语相同)

现在,由于我有一些常见的301重定向,法语网址没有正确重定向并导致英文页面。例如:

Redirect 301 /discover/foo /bar/otherfoo

成功将example.com/discover/foo重定向到example.com/bar/otherfoo,但也重定向fr.example.com/discover/otherfoo

我怎样才能为英语和法语写两条不同的规则?我必须编写一堆不同的规则,因为从旧的子域到新目录的一切都非常不同,我不介意。

谢谢!

修改

请注意,它适用于wordpress安装,而htaccess则以:

开头
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

1 个答案:

答案 0 :(得分:1)

首先是这些规则:

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

应如下所示:

RewriteCond %{HTTP_HOST} ^(www\.)?fr\.example\.com [NC]
RewriteRule (.*) http://example.com/fr/$1 [L,R=301]

为了捕获机器人www&子域名的非www请求。

此规则:

Redirect 301 /discover/foo /bar/foo

将捕获对域和子域的请求并使用mod_rewrite这里是正确的而不是mod_alias所以,请将此行替换为:

RewriteCond %{HTTP_HOST} ^(www\.)?example\.com [NC]
RewriteRule ^discover/foo http://example.com/bar/foo [L,R=301]
RewriteCond %{HTTP_HOST} ^(www\.)?(fr)\.example\.com [NC]
RewriteRule ^discover/foo http://example.com/%2/bar/foo [L,R=301]

注意:清除浏览器缓存,然后进行测试。