0

我有三个不同的域指向同一个 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 ---> en .mydomain.com ---> 以英文显示网站

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

我已经研究并尝试修改三个 RewriteCond 规则以在 url 末尾“添加”附加内容(不知道使用 QUERY_STRING 还是使用参数更好),但我无法得到它工作正常,而不是我不知道这是否是实现它的最佳方法。

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

4

1 回答 1

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]

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

于 2012-09-24T13:34:49.547 回答