nginx重定向旧wordpress文章

时间:2016-04-26 09:01:45

标签: regex nginx

我们不久前重新启动了我们的wordpress网站,我试图否定我们的Google抓取工具错误。

我们使用简单模式在trackback网址上有超过10k的错误。编写一个小脚本并逐个修复它很容易,但我想是否可以通过nginx服务器配置中的一个简单重写规则解决这个问题

旧图案: {蛞蝓} / {ID} /引用

应重定向到:{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;
}

1 个答案:

答案 0 :(得分:0)

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

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

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

如果id是一个纯粹的数字字段,那么这样的事情应该有效:

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