Wordpress重写规则在URL中强制使用默认的lang代码



我正在用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]

相关内容

最新更新