Я пытаюсь добавить параметры URL к определенным URI запроса в блоке сервера.
Вот что у меня есть на данный момент:
if ( $request_uri = "/testing/signup" ) {
rewrite ^ https://www.example.com/testing/signup?org=7689879&type_id=65454 last;
}
location /testing/ {
try_files $uri $uri/ /testing/index.php;
}
Однако это работает только в том случае, если исходный URI запроса не имеет собственных параметров URL (например,www.example.com/testing/signup?abc=hello) Я хочу сохранить исходные параметры URL и добавить свои собственные.
Я пробовал изменить регулярное выражение на if, ( $request_uri ~* "^/testing/signup" ) {
но это приводит к зацикливанию.
Кто-нибудь может помочь?
**** ОБНОВЛЯТЬ ****
Я обновился, чтобы попробовать это:
location /testing/ {
rewrite ^/testing/signup$ /testing/signup?org=1231564 break;
try_files $uri $uri/ /testing/index.php$is_args$args;
}
Это не передает параметры URL, но при проверке журналов можно увидеть, что и существующий параметр URL, и новый находятся в переменной args. Но как мне поместить их в запрос GET на сервер, чтобы он мог действовать на них?
2021/08/03 02:27:07 [notice] 3202#3202: *27 "^/testing/signup$" matches "/testing/signup", client: 146.75.168.54, server: example.com, request: "GET /testing/signup?id=1 HTTP/2.0", host: "www.example.com"
2021/08/03 02:27:07 [notice] 3202#3202: *27 rewritten data: "/testing/signup", args: "org=1231564&id=1", client: 146.75.168.54, server: example.com, request: "GET /testing/signup?id=1 HTTP/2.0", host: "www.example.com"
решение1
Добро пожаловать в ServerFault.
Переменнаязапрос_uriсодержит "полный исходный URI запроса (с аргументами)". Вот почему запрос с существующим параметром не работал для исходного кода. Вместо этого мы могли бы использоватьурито естьнормализованный.
Бесконечный цикл можно исправить, проверив наличие требуемых параметров. Поскольку Nginx не поддерживает вложенные условия if, мы можем использовать другую логику.
Итак, следующий код будет работать...
error_page 418 @goodtogo;
location /testing/ {
if ($arg_org != "") { return 418; }
if ($arg_type_id != "") { return 418; }
if ( $uri = "/testing/signup" ) { rewrite ^ /testing/signup?org=7689879&type_id=65454 redirect; }
try_files $uri $uri/ /testing/index.php =404;
}
location / {}
location @goodtogo {
try_files $uri $uri/ /testing/index.php =404;
}
Пожалуйста, знайте, что исходные параметры добавляются к нашим вручную добавленным параметрам. Так, для запроса типа www.example.com/testing/signup?abc=hello
, URI переписывается в www.example.com/testing/signup?org=7689879&type_id=65454&abc=hello
.