Объединить 2 правила перезаписи Nginx с регулярным выражением

У меня есть несколько URL-адресов, которые я перенаправляю в Nginx, однако у некоторых есть «-de» в конце место, которое я хочу удалить. Я также удаляю часть «bereich /» из URL:

https://www./example.com/de/kaufen/bereich/menorca-de/
https://www./example.com/de/kaufen/bereich/spain-de/
https://www./example.com/de/kaufen/bereich/costa-de-la-calma/

... которую я хочу в конечном итоге в следующем формате:

https://www./example.com/de/kaufen/menorca/
https://www./example.com/de/kaufen/spain/
https://www./example.com/de/kaufen/costa-de-la-calma/

Я могу сделать это, используя два отдельных правила перезаписи, например:

# Remove ES and DE from URL's
rewrite ^(.*)(-de|-es)/$ $1/ permanent;

# Remove bereich from URL
rewrite ^/de/kaufen/([a-zA-Z'-]+)/$ /de/kaufen/$1/? permanent;

.. но хотел спросить, есть ли способ объединить оба правила так, чтобы в цепочке было только одно перенаправление вместо двух. Я включил третий URL-адрес, чтобы продемонстрировать, что некоторые URL-адреса имеют «-de», поэтому его нужно оставить в покое, а только те, которые заканчиваются на «-de» непосредственно перед косой чертой. Большое спасибо.

0
задан 14 December 2018 в 13:11
1 ответ

Если все ваших URL-адресов имеют часть / bereich , и только некоторые из них имеют -es или -de , попробуйте следующее:

rewrite ^(.*)bereich/([^/]+?)(?:-de|-es)?\/$ $1$2/ permanent;

Или более строгое регулярное выражение, которое работает только с префиксом / de / kaufen / :

rewrite ^/de/kaufen/bereich/([^/]+?)(?:-de|-es)?\/$ /de/kaufen/$1/ permanent;
0
ответ дан 5 December 2019 в 04:59

Теги

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