Estou tentando escrever uma diretiva de reescrita nginx que redireciona um URL como https://website.com/2018/11/20/dummytext/feed/
( https://website.com/2018/11/20/dummytext/
removendo o /feed/
no final).
Eu não posso simplesmente fazer uma correspondência (.*)/feed/
porque não quero redirecionar https://website.com/feed/
.
Eu criei este regex que corresponde a todas as postagens com /feed/ no final, o que parece funcionar: https://www.regextester.com/?fam=111507
Isto é o que eu tenho no nginx:
rewrite "^\b(19|[2-9][0-9])\d{2}\b\/(.*)\/feed\/?$" https://website.com/$1 permanent;
O primeiro problema é que não parece funcionar (eu reiniciei o nginx). Quando visito um URL como https://website.com/2018/11/20/dummytext/feed/
se não fosse redirecionado para lugar algum. O segundo problema é que não tenho certeza sobre essa parte https://website.com/$1
e se ela realmente cortaria /feed/
a URL mantendo o restante da URL como está.
Não tenho certeza se o Nginx suporta
\b
, mas você só precisa usar/
(sem barra invertida).Você não precisa especificar
https://example.com
no URI de substituição se o valor permanecer inalterado. Consulte este documento para obter detalhes.No exemplo em sua pergunta, dois valores são capturados (
$1
e$2
), mas apenas um é usado no URI de substituição.Tentar:
Você menciona que
.*
também corresponde a zero caracteres, no entanto,.+
corresponde a pelo menos um caractere. Além disso, a colocação de vários/
caracteres no padrão pode evitar a/feed
condição de borda.Por exemplo: