WordPress搜索查询字符串的301重定向结果为404

时间:2017-07-17 作者:DavidBrown

我正在使用一个已经存在很长时间的博客,但最近从另一个平台迁移到WordPress。所有旧URL都通过中的301重定向映射到新的永久链接。htaccess。除了涉及搜索查询的重定向之外,大多数重定向都按预期进行。当将搜索查询从旧的平台结构重定向到WordPress结构时,重定向不会生效,用户会收到404。通常情况下,这不会引起很大的关注,但谷歌正在对这些内容进行爬网,并在客户端的搜索控制台中发出警报。

例如,这会产生预期的结果:

Redirect 301 /p/about-me.html https://www.example.com/about/
但是,这不会重定向并导致404:

Redirect 301 /search?q=avengers https://www.example.com/?s=avengers
也许这与WordPress如何处理搜索的查询字符串有关,但这不是我以前见过的。

想法?

1 个回复
最合适的回答,由SO网友:MrWhite 整理而成

Redirect 301 /search?q=avengers https://www.example.com/?s=avengers
无法将查询字符串与mod\\u别名匹配Redirect (或RedirectMatch) 指令。这个Redirect 指令仅与URL路径匹配。您需要使用mod\\u重写并匹配QUERY_STRING 服务器变量。

例如:

RewriteCond %{QUERY_STRING} ^q=avengers$
RewriteRule ^search$ /?s=avengers [R=301,L]
这需要在现有WordPress前端控制器之前进行。

上的斜杠前缀RewriteRule 模式有意省略。^search$ 匹配URL路径/search 在a中.htaccess 上下文

然而,由于WordPress已经使用mod\\u rewrite(前端控制器等),因此您也应该使用mod\\u rewrite来进行这些重定向,而不是使用mod\\u alias。在请求过程中,不同的模块在不同的时间执行,因此最终可能会出现意外的冲突。(你可能发现你可以把另一个Redirect 世界上任何地方的指令.htaccess 文件,它仍然“工作”-这不是特别直观。)

您尝试过RedirectMatch 301吗<不,因为我正在重定向特定的URL,而不是模式。

旁白:这个论点站不住脚。“模式”可以匹配特定的URL(事实上,这样做更容易)。上面的mod\\u rewrite指令使用“patterns”(即regex),但只匹配您指定的确切URL。事实上Redirect 也不匹配“特定URL”-它是前缀匹配(整个路径段),因此您可以发现Redirect 实际上比你想象的要匹配得多!

结束

相关推荐

Permalinks - .htaccess

根据WordPress官方文档,当你保存永久链接时,它会更新你的。htaccess文件(https://codex.wordpress.org/Settings_Permalinks_Screen).然而,当我进行永久链接更改并保存它们时,我看不到任何更改。htaccess更新。有人能澄清一下WordPress文档是否不准确,或者我是否遗漏了什么。