2016-04-26 2 views
1

мы перезапустили наш сайт WordPress некоторое время назад, и я пытаюсь свести на нет ошибки Google искателя.nginx redirect для старых статей Wordpress

У нас более 10 тыс. Ошибок на URL-адресах trackback с простым шаблоном. И достаточно просто написать небольшой скрипт и зафиксировать их один за другим, но я думал, если это можно решить с помощью одного простого правила перезаписи в конфигурации сервера nginx.

старый шаблон: {slug}/{id }/трекбек

должен перенаправлять: {} пробкового

к сожалению, я плохо Rly регулярных выражений выражений и имеют мало опыта в написании правил переписывания. Что я знаю, что я должен иметь место, которое говорит Nginx, когда выполнить нужные правила перезаписи, и я думал о чем-то вроде этого

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

, когда я пытаюсь это правило я получаю сообщение unexpected "}" об ошибке при перезапуске Nginx

также, что шаблон местоположения очень идентичен описанию перезаписи, выглядит очень подозрительным для меня, может быть, есть лучшее решение?

обновление

Текущая версия:

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; 
} 
+0

Вы можете попробовать внешний редирект путем изменения '' last' к redirect'. –

+0

@RichardSmith да! это было, THX! обновит мой пост – braunbeard

ответ

0

Синтаксис, вероятно отсутствующей ; после rewrite правила. Вам также не нужен оператор ~ в директиве location (см. this document). И вам не хватает захвата.

Вы правы, что существует дублирование в том, что регулярное выражение location нуждается в тестировании, тогда регулярное выражение rewrite нуждается в тестировании, что, вероятно, дублирует усилие.

Поскольку правило перезаписи довольно специфично, его следует, вероятно, разместить в блоке server над всеми блоками location.

Если id чисто числовое поле, что-то, как это должно работать:

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

thx!я смог исправить проблему синтаксиса с вашей помощью, но правило не срабатывает) -: я обновлю сообщение, соответственно – braunbeard

+0

> И вам не хватает захвата. что делает ** захват ** означает в этом контексте? sry english не является моим первым языком – braunbeard

+0

@braunbeard Я имел в виду '()', используемый в регулярном выражении, для захвата значения '$ 1' –