2016-04-26 90 views
1

我们重新启动了我们的WordPress网站前段时间,我试图否定我们的谷歌爬虫错误。nginx重定向旧wordpress文章

我们有一个简单模式的引用网址超过10k错误。写一个小脚本并且让它们一个接一个地被修复是很容易的,但是我想这是否可以通过nginx服务器配置中的一个简单的重写规则来解决。

旧模式: {slug}/{id } /引用

应该重定向到:{}塞

可悲的是我在正则表达式RLY坏,并有书面重写规则的经验。我所知道的是,我应该有它告诉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

这一项工作rewrite规则后(改变lastredirect和逃脱斜线)

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

你可能会改变'last'到'redirect'尝试一个外部重定向。 –

+0

@RichardSmith是的!就是这样,thx!将更新我的帖子 – braunbeard

回答

0

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

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

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

如果id是一个纯数字领域,这样的事情应该工作:

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

thx!我能够解决语法问题与你的帮助,但规则没有触发) - :我会相应地更新我的帖子 – braunbeard

+0

>你错过了捕获。 在这种情况下** capture **意味着什么? sry英语不是我的第一语言 – braunbeard

+0

@braunbeard我指的是正则表达式中使用的'()'来捕获'$ 1'的值 –