RewriteCond问题,包含.htaccess中的子域和路径

时间:2012-09-24 11:55:13

标签: wordpress .htaccess mod-rewrite qtranslate

我有三个不同的域指向同一个WordPress的主机实例,具体取决于语言(使用qTranslate插件管理):

RewriteEngine On
Options +FollowSymLinks
RewriteBase /
RewriteCond %{HTTP_HOST} ^(www\.)?mydomain\.cat$
RewriteRule ^/?$ "http\:\/\/ca\.mydomain\.com\/" [R=301,L]
RewriteCond %{HTTP_HOST} ^(www\.)?mydomain\.com$
RewriteRule ^/?$ "http\:\/\/en\.mydomain\.com\/" [R=301,L]
RewriteCond %{HTTP_HOST} ^(www\.)?mydomain\.es$
RewriteRule ^/?$ "http\:\/\/es\.mydomain\.com\/" [R=301,L]

有了这个,我设法实现了以下重定向:

  • mydomain.cat或www.mydomain.cat ---> ca .mydomain.com --->以加泰罗尼亚语显示网站
  • mydomain.es或www.mydomain.es ---> es .mydomain.com --->以西班牙语显示网站
  • mydomain.com或www.mydomain.com ---> zh_ .mydomain.com --->显示英文网站

现在我遇到的麻烦是,例如,用户输入mydomain.cat/work它不能正常工作,它会转到mydomain.com/work/并且缺少子域中的语言部分。如果在这种情况下重定向到ca.mydomain.com/work,那将是完美的。

我已经研究并试图修改三个RewriteCond规则,以便在网址的末尾添加额外的内容(不知道QUERY_STRING或参数是否更好),如果它存在,但我无法'让它工作正常,而我不知道这是否是实现它的最佳方式。

任何人都可以帮助我或给我一些线索吗?

1 个答案:

答案 0 :(得分:0)

好的,我明白了:

RewriteEngine On
Options +FollowSymLinks
RewriteBase /
RewriteCond %{REQUEST_URI} ^/[^\.]+[^/]$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [R=301,L]
RewriteCond %{HTTP_HOST} ^(www\.)?mydomain\.cat$
RewriteRule (.*) "http\:\/\/ca\.mydomain\.com\/$1" [R=301,L]
RewriteCond %{HTTP_HOST} ^(www\.)?mydomain\.com$
RewriteRule (.*) "http\:\/\/en\.mydomain\.com\/$1" [R=301,L]
RewriteCond %{HTTP_HOST} ^(www\.)?mydomain\.es$
RewriteRule (.*) "http\:\/\/es\.mydomain\.com\/$1" [R=301,L]

我在RewriteRule语句的末尾添加了$ 1,并在开头用(。*)覆盖了^ /?$。我还将这两行添加到其他行之上:

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

防止斜杠。我希望这对某人有帮助。