我正在用qtranslate运行一个WP博客。它允许我用多种语言创建帖子。
1。不带qtranslate:的示例URL
- www.mysite.com/post1
2。带有本地化内容的示例URL:
-
www.mysite.com/**en**/post1(英语-我的默认和后备)
-
www.mysite.com/**de**/post1
不幸的是,搜索引擎等仍然记得我的旧链接(1.),这些仍然可以访问。所以"www.mysite.com/post1";现在显示我的英语内容没有重定向。但它应该做的是对301个用户";www.mysite.com/en/post1";。
因此,现在我需要一个规则,基本上检查URL中是否存在/en/post1或/de/post1,否则重定向到回退/1-post1 URL。有一个例外,因为"/商店";是一个真正的子目录,不需要在前面加上语言信息。
--更新--
我做到了!!!这确实很有趣,但我花了很长时间才弄明白。
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,并使用RewriteConds来消除您不希望它重写的情况?
它会变成这样:
RewriteCond %{REQUEST_URI} !^/shop(/|$)
RewriteCond %{REQUEST_URI} !^/(en|de)(/|$)
RewriteRule ^(.*)$ /en/$1 [R=301]
但根据卡米洛的建议,你可以将中间线改为
RewriteCond %{REQUEST_URI} !^/[a-z]{2}(/|$)
只要你能确保你的帖子永久链接不会少于三个字符(我对WordPress不够熟悉,不确定这是否可能)。
只使用元规范呢?
像这样:
<link rel="canonical" href="http://www.example.com/product.php?item=swedish-fish" />
更多信息:http://googlewebmastercentral.blogspot.com/2009/02/specify-your-canonical.html
我做到了!!!这确实很有趣,但我花了很长时间才弄明白。
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]
也许有更好的方法可以做到这一点,但它确实能帮助
--更新这包括对更长URL的支持---
RewriteRule ^([a-zA-Z0-9-_]{3,}(/|$).*)$ en/$1 [R=301,L]
RewriteRule ^(.+[^/])/$ http://%{HTTP_HOST}/$1 [R=301,L]