Остановить перезапись Nginx, нарушающую работу всех страниц после блока местоположения

Остановить перезапись Nginx, нарушающую работу всех страниц после блока местоположения

Мне приходится переписывать URL-адреса в nginx.conf, содержащие определенные параметры запроса;

В качестве примера:-

location /brands/exampleA {

    if ($arg_cat = "9") {
        return 301 /page/brand-filter;
    }

    if ($arg_cat = "38") {
        return 301 /page/category/brand-filter;
    }

}

Эти перезаписи URL-адресов затем будут перезаписываться example.com/brands/exampleA/?cat=9на example.com/page/brand-filterи example.com/brands/exampleA/?cat=38на example.com/page/category/brand-filter.

И они работают отлично, но проблема в том, что они нарушают работу каждой второй дочерней страницы блока местоположения, поэтому, например, следующие страницы не будут загружаться с ошибкой Nginx:

example.com/brands/exampleA/range1
example.com/brands/exampleA/range2
example.com/brands/exampleA/range3
example.com/brands/exampleA/range4

Итак, могу ли я что-то добавить в оператор location, чтобы ничего не применялось к чему-либо после него exampleA? Эти перезаписи должны соответствовать ТОЛЬКО параметрам запроса ?cat=.

решение1

В вашей конфигурации в настоящее время используетсяпрефикс местоположение, что означает, что он рассматривается, когда запрошенный URIначинается сЗначение /brands/exampleA.

Чтобы ограничить соответствие только одним URI, используйтеполное совпадениесинтаксис:

location = /brands/exampleA/ { ... }

Видетьэтот документдля получения подробной информации.

Связанный контент