【问题标题】:Wordpress Rewrite Rule to enforce default lang code in URLWordpress 重写规则以在 URL 中强制执行默认语言代码
【发布时间】:2021-09-09 21:42:41
【问题描述】:

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

1 .不带 qtranslate 的示例 URL:

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

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

所以现在我需要一个规则来检查 URL 中是否存在 /en/post1 或 /de/post1,否则重定向到后备 / zh/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]

可能有更好的方法来做到这一点,但它确实有效。感谢大家最初的帮助!

【问题讨论】:

  • 寻找“en”、“de”等看起来是个坏主意,可能很难维护。你已经有一个例外,可能还会有更多,而且看起来并不漂亮。
  • 卡米洛,你是对的。它并不漂亮 - 我只是对 Rewrites 的了解不够,无法使其正常工作!

标签: regex wordpress url-rewriting wordpress-theming qtranslate


【解决方案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 不够熟悉,无法确定是否可行)。

【讨论】:

  • 瑞克,非常感谢您的建议。不幸的是,它不能很好地与现有的 WP 重定向混合并破坏网站。那里已经有一些 cond 并添加您的代码与它们冲突。 RewriteEngine On RewriteBase / RewriteRule ^$ en [R=301,L] RewriteRule ^en/$ en [R=301,L] RewriteRule ^de/$ de [R=301,L] RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule 。 /index.php [L]
  • 我在想一些类似的东西: RewriteRule !^/(en|de)(/|$) /en/$1 [R=301,L] 虽然这会导致重定向循环,但它应该某事那样...
【解决方案2】:

只使用元规范怎么样?

像这样:

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

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

【讨论】:

  • 好主意,但 Google 仍然建议仅从一个 URL 提供内容。有点难,但有一些修复它可以工作。在我自己看来,这似乎也是最合乎逻辑的。只需要自己深入研究这些规则才能真正了解如何正确使用它们。
【解决方案3】:

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

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]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    • 2018-03-30
    • 1970-01-01
    • 2012-03-21
    • 1970-01-01
    相关资源
    最近更新 更多