【问题标题】:Nginx 404 to 301 redirect based on URINginx 基于 URI 的 404 到 301 重定向
【发布时间】:2014-03-08 08:42:03
【问题描述】:

我正在尝试在 WordPress 中创建多个 404 重定向,我目前正在使用这个:

error_page 404 @foobar;

location @foobar {
    rewrite  .* / permanent;
}

我知道这是为了重定向到主页,但是这个方法根本不起作用,因为它默认为常规的 WordPress 404.php 文件包含在主题中。这很好,但我需要通过 Nginx 而不是 WP 来实现重定向,因为一旦页面被声明为 404,我需要创建不同的重定向。

示例: 假设我的 WP 网站上有大约 10 个类别。 我有帖子来来去去,一旦帖子消失,我想将该帖子(因为某个类别中的每个帖子都有一个唯一标识符)重定向到基本类别。

示例:重定向不存在的帖子

/i-love-soup-cause-it-tastes-so-good-campbellssoup ---> /category/campbellssoup

/toystory-3-is-a-great-movie-coolmovies ---> /category/coolmovies

基本上,只有在将 URI 建立为 404 之后,我才需要创建多个重定向到多个位置。有什么想法吗?

编辑:

好的,使用

fastcgi_intercept_errors on;

我设法消除了 wordpress 中的虚拟错误。现在我有重定向到@foobar 的工作,但我无法让uri 转移到@foobar 位置块。我猜这与我 / location 块中的 try_files 有关。

location / {
    #try_files $uri $uri/ /index.php?q=$request_uri;
    try_files $uri $uri/ /index.php?$args;
}

【问题讨论】:

  • 你不能同时做404和301,要么这个要么那个
  • 我想捕获 404,并将所有 404 带入它们自己的位置块,这样我就可以处理基于 URI 的重定向。也许说起来容易做起来难,但这可以直接解决这个问题而无需使用插件。
  • 如何将所有 404 发送到一个 php 脚本,该脚本会生成 404,这对你有用吗?
  • 它会工作,但我有 404 位置块工作,我无法让重写工作,因为我无法获得正确的语法。我的模板有 wordpress 默认的 404.php,但我宁愿将所有旧帖子都重定向到它们曾经所属的类别。

标签: php wordpress redirect nginx


【解决方案1】:

首先,您的配置中有语法错误,它应该是error_page 404 = @fallback。 这应该可以正常工作,仅当 wordpress 生成 404 时。我的猜测是它包含类似 404.php 的内容。我也不确定您是否可以在指定位置更改状态代码。文档明确指出,在不需要更改 URI 的情况下可以使用回退位置,并使用对您没有用的不同语法提供更改 URL。 我首先要弄清楚 WordPress 是否自己处理 404。如果是这种情况,则处理该文件中的重定向。 如果不是,那么只需创建您自己的页面,以您熟悉的脚本语言处理重定向。如果您可以在指定位置为错误页面进行重写,那么@tcurvelo 解决方案的底部应该可以解决问题。

【讨论】:

  • 感谢 Melvyn 的输入,我“希望”通过 Nginx 处理重定向,因为它会更快,并且根据我拥有的类别数量,只有少数几个。我已经设法让 404 重定向工作,因此它绕过了 WP 404.php,并且我已经成功地在那里进行了 301 重定向到主页,但是我很难检索到该站点的 URI重定向。我现在唯一使用的是redirect .* / permanent;,它会在 404 之后成功 301,所以我知道如果我正确获取了 URI,我可以做更多的事情。
猜你喜欢
  • 2020-07-17
  • 2012-02-27
  • 2020-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-14
  • 1970-01-01
相关资源
最近更新 更多