Как совместить вопросительный знак "?" как regexp на месте nginx.conf

Я хотел бы совместить вопросительный знак "?" как regexp в местоположении nginx.conf.

Например, шаблон URL, который я хотел бы сопоставить, это/что-то? foo = 5 или /something? bar = 8 (только параметр изменен).

Поскольку nginx принимает RCPE, я могу записать местоположение на nginx.conf следующим образом:

location ~ ^/something\?.* {
}

Вышеупомянутое не соответствует шаблону URL. Как я могу это сделать?

Кроме того, это не мое ожидание.

location ~ ^/something?.* {
}

Он будет соответствовать /something _foo_bar_buzz, чего я не ожидаю.

Ответы

Ответ 1

Блок расположения nginx не соответствует строке запроса. Так что это невозможно.

Местоположение

Эта директива допускает различные конфигурации в зависимости от URI.

В nginx имеется встроенная переменная $uri, с которой сопоставляется блок местоположения. Например, дайте запрос

http://www.example.com/app/login.php?username=xyz&password=secret

значение $uri - это строка:

 /app/login.php

а query_string хранится в переменной nginx $args:

username=xyz&password=secret

Чтобы что-то сделать. строка запроса, вы можете сделать что-то вроде

if ($args ~ username=xyz) {
   # do something for requests with this query string
}

Но будьте осторожны, IF is Evil