nginx rewrite exclude url, содержащий строку

Я хочу удалить разбиение на страницы со всех URL, кроме тех, которые содержат / page / [0-9]

example

Удалить разбиение на страницы:

https://www.example.com/some/thing/here/2/
https://www.example.com/some/thing/here/3/
https://www.example.com/some/thing/here/4/

Они будут перенаправлены на

https://www.example.com/some/thing/here/
https://www.example.com/some/thing/here/
https://www.example.com/some/thing/here/

В настоящее время using:

rewrite ^(.*/)[0-9]+/?$ $1 permanent;

, который работает хорошо, но мы хотим исключить перенаправление, если URL-адрес содержит такую ​​страницу:

https://www.example.com/page/2/?s=somesearch
https://www.example.com/page/3/?s=somesearch
https://www.example.com/page/4/?s=addition

Пробовал несколько попыток, например:

rewrite ^(.*/)(?!page/[0-9]+)[0-9]+/?$ $1 permanent;

Нужно ли мне использовать здесь 'if' с блоком местоположения?

0
задан 24 March 2019 в 18:10
1 ответ

Я не знаю, поддерживает ли nginx отрицательный просмотр вперед, поэтому я бы предложил использовать что-то вроде:

rewrite  ^(/([^p]|p([^a]|a([^g]|g([^e]|e[^/])))).*/)[0-9]+/?$ $1 permanent;

, который в основном соответствует каждому «разбитому на страницы» -запросу (как в ваших примерах), не начиная с page /

1
ответ дан 4 December 2019 в 15:44

Теги

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