.htaccess htaccess将子域重定向到目录

.htaccess htaccess将子域重定向到目录,.htaccess,redirect,subdomain,.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] 我现在的问题是为页面编写更具体的内容,例如

我需要帮助在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
(url的结尾在英文和法文中是相同的)

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

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]
首先,这些规则:

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]
为了捕获子域的bot 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]

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

谢谢!但是关于最后两行,这会重定向discover/to bar/right之后的任何内容吗?我怎样才能更具体?我之所以更新我的示例,是因为有时候,slug可能会有所不同(而不是保持“foo”)@CécileHabran我在想,你想用bar替换任何discover,现在就测试它mh,它适用于英语(没有子域),但不适用于fr。我从htaccess删除了所有301重定向,但它只显示404。第一个重定向
RewriteCond%{HTTP_HOST}^(www\.)?fr\.example\.com[NC]RewriteRule(.*)http://example.com/fr/$1[L,R=301]
虽然我已经清除了它,但我再次清除了它,并在另一个浏览器中进行了测试。
RewriteCond%{HTTP\u HOST}^(www\.)?(fr)\.example\.com[NC]RewriteRule^discover/foohttp://example.com/%2/bar/foo [L,R=301]
什么都不做:/我编辑了这个问题,因为它可能有用,因为它是wordpress安装