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