使用 Nginx 將 URL 參數附加到請求 URI

使用 Nginx 將 URL 參數附加到請求 URI

我正在嘗試將 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 參數和新的 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

歡迎來到伺服器故障。

變數請求地址包含“完整的原始請求 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

相關內容