2016-04-26 89 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'的值 –