我需要帮助在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]
答案 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]
注意:清除浏览器缓存,然后进行测试。