Назад | Перейти на главную страницу

regex переписать в nginx в соответствии с годом в URL

Я пытаюсь написать директиву перезаписи nginx, которая перенаправляет URL-адрес, например https://website.com/2018/11/20/dummytext/feed/ к https://website.com/2018/11/20/dummytext/ (удаление /feed/ в конце концов).

Я не могу просто сопоставить (.*)/feed/ потому что я не хочу перенаправлять https://website.com/feed/.

Я создал это регулярное выражение, которое соответствует всем сообщениям с / feed / в конце, которое, похоже, работает: https://www.regextester.com/?fam=111507

Вот что у меня в nginx:

rewrite "^\b(19|[2-9][0-9])\d{2}\b\/(.*)\/feed\/?$" https://website.com/$1 permanent;

Первая проблема заключается в том, что он не работает (я перезапустил nginx). Когда я посещаю URL-адрес типа https://website.com/2018/11/20/dummytext/feed/ Меня никуда не перенаправляют. Вторая проблема в том, что я не уверен насчет этой части https://website.com/$1 и действительно ли это сократит /feed/ из URL-адреса, оставив остальную часть URL-адреса как есть.

Не уверен, поддерживает ли Nginx \b, но вам нужно только использовать / (без обратной косой черты).

Вам не нужно указывать https://example.com в заменяющем URI, если значение не изменилось. Видеть этот документ для подробностей.

В примере в вашем вопросе фиксируются два значения ($1 и $2), но в заменяющем URI используется только один.

Пытаться:

rewrite "^/(19|[2-9][0-9])\d{2}/(.*)/feed/?$" /$1/$2/ permanent;

Вы упомянули, что .* также соответствует нулевым символам, однако .+ Спички по крайней мере один персонаж. Также размещение нескольких / символы в шаблоне могут избежать /feed краевое состояние.

Например:

rewrite ^(/.+/)feed/?$ $1 permanent;