htaccess将特定TLD重定向到子文件夹,同时保留现有的根到子文件夹重定向

时间:2017-12-14 11:13:00

标签: regex apache .htaccess redirect url-rewriting

我有一个域example.com,其中example.com/en-US/上有一个英文版网站,example.com/fr-FR/上有一个法文版

到目前为止,我们已将英文版本用作默认版本,因此我们会使用example.com文件中的这些规则将请求example.com/en-US/的所有人重定向到.htaccess

Redirect 301 /index.html http://examle.com/en/

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://example.com/$1/ [L,R=301]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
RewriteRule . %1/%2 [R=301,L]

因此,当您在浏览器中请求http://exmaple.com时,服务器将请求index.html,这将触发Rediret到/en-US/目录。

现在我们得到了法语example.fr TLD - 指向同一个网站空间。我现在正在寻找一种方法将浏览器请求http://example.fr重定向到http://example.com/fr-FR/

我尝试添加以下条件,但会导致某种循环在网址中添加大量/en-US/

请帮助我,我需要一种重定向方式

  

hxxp://example.com - > hxxp://example.com/en-US/

     

hxxp://example.fr - > hxxp://example.com/fr-FR/

     

所有人明确请求hxxp://example.com/index.html - > hxxp://example.com/en-US/ too

1 个答案:

答案 0 :(得分:0)

您可以根据基于HTTP_HOST的条件使用此规则:

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} ^(?:www\.)?example\.com$ [NC]
RewriteRule ^(?:index\.html)?$ /en-US/ [L,NC,R=301]

RewriteCond %{HTTP_HOST} ^(?:www\.)?example\.fr$ [NC]
RewriteRule ^(?:index\.html)?$ /fr-FR/ [L,NC,R=301]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !/$
RewriteRule ^ %{REQUEST_URI}/ [L,R=301,NE]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
RewriteRule . %1/%2 [R=301,L,NE]