【问题标题】:nginx redirect for old wordpress articlesnginx 重定向旧的 wordpress 文章
【发布时间】:2016-04-26 09:01:44
【问题描述】:

我们不久前重新启动了我们的 wordpress 网站,我正试图消除我们的谷歌爬虫错误。

我们在带有简单模式的引用 URL 上出现了 10k 多个错误。编写一个小脚本并一个一个地修复它们很容易,但我在想是否可以通过 nginx 服务器配置中的一个简单的重写规则来解决这个问题

旧模式: {slug}/{id}/trackback

应该重定向到:{slug}

遗憾的是,我不擅长正则表达式,并且在编写重写规则方面经验不足。我所知道的是我应该有一个位置告诉 nginx 何时执行所需的重写规则,我正在考虑这样的事情

location ^.*/trackback {
     rewrite ^.*/[0-9].*/trackback /$1
}

当我尝试这条规则时,我在重启 nginx 时收到 unexpected "}" 错误消息

另外,位置模式与重写语句非常相似,对我来说看起来很可疑,也许有更好的解决方案?

更新

当前版本:

location ~^(.*)/trackback {
    rewrite ^(.*)/[0-9]+/trackback $1 last;
}

语法问题已解决,但规则不适用/未触发 这里是一个例子

/my-test-article/12312/trackback 现在应该被重定向到 /my-test-article

但事实并非如此

更新 2

这个正在工作(将 last 更改为 redirect 并转义了斜线)

location ~ ^(.*)\/trackback {
    rewrite ^(.*)\/[0-9]+\/trackback $1 redirect;
}

【问题讨论】:

  • 您可以通过将last 更改为redirect 来尝试外部重定向。
  • @RichardSmith 是的!就是这样,谢谢!会更新我的帖子

标签: regex nginx


【解决方案1】:

语法错误可能是在rewrite 规则之后缺少;。您还缺少location 指令中的~ 运算符(有关详细信息,请参阅this document)。而且你错过了一次捕获。

你说得对,location 正则表达式需要测试,然后rewrite 正则表达式需要测试,这可能会重复工作。

由于重写规则非常具体,它可能应该放在所有location 块上方的server 块中。

如果id 是一个纯数字字段,那么应该可以这样:

rewrite ^(.*)/[0-9]+/trackback $1 last;

【讨论】:

  • 谢谢!我能够在您的帮助下解决语法问题,但没有触发规则)-:我将相应地更新我的帖子
  • > 你错过了一个捕获。 capture 在这种情况下是什么意思? sry 英语不是我的母语
  • @braunbeard 我指的是正则表达式中使用的() 来捕获$1 的值
猜你喜欢
  • 2016-06-27
  • 2016-11-07
  • 2018-02-13
  • 1970-01-01
  • 2013-11-27
  • 1970-01-01
  • 2016-05-20
  • 2015-02-26
  • 2016-12-28
相关资源
最近更新 更多