重写规则以在URL中强制执行默认语言代码

时间:2012-02-10 00:04:13

标签: regex wordpress mod-rewrite redirect qtranslate

我正在使用qtranslate运行WP博客。它允许我用多种语言创建帖子。

1。没有qtranslate的示例网址:

www.mysite.com/post1

2。具有本地化内容的示例URL:

www.mysite.com/ en / post1(英语 - 我的默认和后备)

www.mysite.com/的 / POST1

不幸的是搜索引擎等仍然记得我的旧链接(1.),这些仍然是可访问的。因此,“www.mysite.com/post1”现在显示我的英文内容,没有重定向。但它应该做的是301用户“www.mysite.com/en/post1”。

所以现在我需要一个规则,基本上检查URL中是否有/ en / post1或/ de / post1,否则重定向到后备/ en / post1网址。有一个例外,因为“/ shop ”是一个真正的子目录,不需要在语言信息之前。

- 更新 -

我做到了!这实际上很有趣,但我花了很长时间才弄明白。

RewriteRule ^$ en [R=301,L]
RewriteRule ^([a-z]{2})/{1}$ $1 [R=301,L]
RewriteRule ^([a-zA-Z0-9\-\_]{3,})(/|$)$ en/$1 [R=301,L]

可能有更好的方法可以做到这一点,但它可以解决问题。感谢大家的初步帮助!

3 个答案:

答案 0 :(得分:1)

您是否尝试过使用通用RewriteRule,并使用RewriteConds来消除您不希望重写的情况?

它会像:

RewriteCond %{REQUEST_URI} !^/shop(/|$)
RewriteCond %{REQUEST_URI} !^/(en|de)(/|$)
RewriteRule ^(.*)$ /en/$1 [R=301]

但根据Camilo的建议,你可以将中间线改为

RewriteCond %{REQUEST_URI} !^/[a-z]{2}(/|$)

只要您可以确保您的帖子永久链接不会少于三个字符(我对WordPress不够熟悉,以确定是否可行)。

答案 1 :(得分:0)

使用meta规范怎么样?

像这样:

<link rel="canonical" href="http://www.example.com/product.php?item=swedish-fish" />

更多信息:http://googlewebmastercentral.blogspot.com/2009/02/specify-your-canonical.html

答案 2 :(得分:0)

我做到了!这实际上很有趣,但我花了很长时间才弄明白。

RewriteRule ^$ en [R=301,L]
RewriteRule ^([a-z]{2})/{1}$ $1 [R=301,L]
RewriteRule ^([a-zA-Z0-9\-\_]{3,})(/|$)$ en/$1 [R=301,L]

可能有更好的方法来做到这一点,但它可以解决问题

- 更新这包括支持更长的网址---

RewriteRule ^([a-zA-Z0-9\-\_]{3,}(/|$).*)$ en/$1 [R=301,L]
RewriteRule ^(.+[^/])/$ http://%{HTTP_HOST}/$1 [R=301,L]