サーバー ブロック内の特定のリクエスト URI に URL パラメータを追加しようとしています。
これまでのところ、次のものがあります:
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 パラメータと新しい 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
。