根据网址路径更改域名

时间:2016-05-27 10:16:48

标签: apache .htaccess mod-rewrite url-redirection

我有一个多语言网站,可以在不同的领域中使用该语言。所有域共享相同的字体代码,网站(Drupal)使用路径确定语言。 现在我已经将每个域配置为重定向到自己的语言,所以我得到了:

  • www.example.com - > www.example.com/en
  • www.example.es - > www.example.es/es
  • www.example.ru - > www.example.ru/ru

这样,当用户进入网站时,cms会将语言切换到与该域对应的语言。

我的问题是当有人使用网站上的语言切换器时,它会更改所有查询参数以显示与该语言相对应的内容不会更改域名,如果我是在www.example.com/en/something并切换到西班牙语,我将以www.example.com/es/algo结尾。

我还需要de domain根据语言进行更改(在域名后面总是写成/en/es/ru),如果可能的话,保留查询参数。

我已经在htaccess中编写了这段代码(仅限俄语,作为测试),但我担心它可能完全错误,因为它什么都不做:

  RewriteCond %{REQUEST_URI}  ^/ru$1
  RewriteRule ^$1 http://www.example.ru/ru$1 [L,R=301]

任何建议都会非常有用。

2 个答案:

答案 0 :(得分:2)

在您之前的规则之前加上这些:

RewriteCond %{HTTP_HOST} !^www\.example\.com$
RewriteRule ^en/(.*)$ http://www.example.com%{REQUEST_URI} [L,R=301]

RewriteCond %{HTTP_HOST} !^www\.example\.ru$
RewriteRule ^ru/(.*)$ http://www.example.ru%{REQUEST_URI} [L,R=301]

...

请注意,如果用户输入www.example.ru/en/something,路径中的/en将比主机名中的.ru更重要,从而导致重定向到www.example.com/en/something }

答案 1 :(得分:0)

mod_rewrite使用正则表达式。 $1引用需要在匹配部分中“定义”的组(使用括号,.为“匹配所有”运算符):

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