
Мне приходится переписывать 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/ { ... }
Видетьэтот документдля получения подробной информации.