使用 .htaccess 正则表达式重定向 wordpress 结构的正确方法

Posted

技术标签:

【中文标题】使用 .htaccess 正则表达式重定向 wordpress 结构的正确方法【英文标题】:The right way to redirect wordpress structure using .htaccess regex 【发布时间】:2021-12-21 14:08:12 【问题描述】:

您好,我正在尝试将重定向正则表达式添加到我的 .htaccess 重定向

/%year%/%monthnum%/%postname%.html/%category%/%postname%/%post_id%/

Yaost helper 给了我这个

RedirectMatch 301 ^/([0-9]4)/([0-9]2)/([^/]+).html$ https://www.ruoaa.com/$3

我不是专家,但我认为它与我的结构不符

此外,永久链接不是很久以前就已经完成的从博客到 wordpress 的选项迁移,永久链接不会起到作用,所有上层链接都给出 404

【问题讨论】:

【参考方案1】:

它与您希望从 重定向的 URL 匹配。但是,重定向目标不正确,因为它会重定向到/%postname%,而不是/%category%/%postname%/%post_id%/

但其中存在一个问题,由于源 URL 中不存在 %catgeory%%post_id%,因此无法使用 .htaccess 重定向到 /%category%/%postname%/%post_id%/

您需要使用 WordPress 本身中的重定向插件来执行此操作,因为只有 WP 知道此信息。 WP 需要使用%year%%monthnum% 和/或%postname% 从其数据库中查找%category%%post_id%

【讨论】:

我有一千多个网址,重定向插件并没有帮助他们需要手动逐个链接或随机自动重定向。如果我只能在这两项工作中匹配“postname”,那么这项工作就会完成(postname 中的重复项很少是可解决的问题) @Mo.Ali “如果我只能在这两项工作中匹配“postname”,那么这项工作就可以完成” - 好吧,如前所述,这就是您的规则当前所做的。它从/%year%/%monthnum%/%postname%.html 重定向到/%postname%(没有尾部斜杠)。 它没有在 postname 之前和之后为 /category/ 或 /id/ 放置通配符,因此我猜它没有提供所需的链接,例如 /%*%/%postname% /%*%/ @Mo.Ali 这没有意义——目标 URL 中不能有“通配符”。 category 需要以某种方式从 postname 中查找(假设它是唯一的)。 .htaccess 是一个 Apache 配置文件,它完全在 WordPress 之外运行 - 如果您在 .htaccess 中实现重定向,WordPress 不会看到请求的 URL。 一个名为“WP 404 Auto Redirect to Similar Post”的插件这样做是有可能的它不会错过的。【参考方案2】:

没有办法在 .htaccess 中使用正则表达式进行此更改。为了能够重定向到新 URL,您需要每个 URL 的 %category%%post_id%,这两个 URL 在旧 URL 中都不可用。您不能使用正则表达式解析旧 URL 并重定向到新 URL,因为这样做的信息不适用于正则表达式。

要实施此更改,您将需要一种完全不同的方法,例如以下方法之一:

为 WordPress 安装重定向插件,例如 How To Change A WordPress Permalink 中建议的插件之一。 创建所有 URL 的列表,并在旧 URL 和新 URL 之间创建映射以分别重定向每个 URL。对于很长的列表,您可能需要使用 Apache's RewriteMap functionality 之类的内容。 将旧式 URL 重写为自定义处理程序,并对其进行编程以从 WordPress 数据库中查找新 URL。

【讨论】:

是否有任何插件或正则表达式可以创建一个条件,例如“postname”是否存在重定向到它。我已经使用了一个名为“WP 404 Auto Redirect to Similar Post”的插件,但奇怪的是它错过了很多,它似乎比“postname”更匹配,并且没有要编辑的设置 The plugin recommended in the article 说“更改了永久链接结构?您只需输入旧的永久链接结构即可迁移旧的永久链接。支持多次迁移。”我自己从未使用过它,但这听起来很有希望。 如果您找不到适合您的插件,您将不得不采用其他方法之一。或者退后一步,询问是否真的值得更改您的永久链接。 (出于任何与 SEO 相关的原因,可能不值得更改它们。) 重定向插件允许您一一重定向链接,它不重定向结构,它允许您使用正则表达式并将其注入 .htaccess ,仅此而已。改回来不是一种选择,因为它是从 Blogger 迁移到 Wordpress,几年前已经造成的损害,但我仍然收到这些 404 错误并丢失了大部分反向链接,这些插件无法正常工作。 插件它可以做更多的事情,但如果你发现它不能,你需要研究其他解决方案。

以上是关于使用 .htaccess 正则表达式重定向 wordpress 结构的正确方法的主要内容,如果未能解决你的问题,请参考以下文章

在 htaccess 中使用正则表达式进行 301 重定向

htaccess正则表达式301重定向

高分求301重定向的htaccess规则写法

.htaccess 重定向规则相同的域但不同的前缀

.htaccess中带?参数的重定向伪静态写法

.htaccess重定向查询字符串