Я пытаюсь написать директиву перезаписи 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;