regex rewrite in nginx to match year in the 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 как есть.

1
задан 19 September 2019 в 14:35
1 ответ

Не уверен, поддерживает ли 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;
1
ответ дан 3 December 2019 в 23:00

Теги

Похожие вопросы