2017-03-21 92 views
0

我將nginx配置爲反向代理。例如:當請求(對於nginx反向代理服務器)是「http://example.com/test/?username=test1;password=passwdtest1」時,它將必須「修改」爲主服務器的「http://example.com/test/?username=production;password=passwdproduction1」。Nginx重寫:如何將URL從動態更改爲靜態

請考慮在原始請求中,「username = test1; password = passwdtest1」字段並不總是相同(它們會更改),而是主服務器的「修改」總是相同。

其他例子更加清楚:

「?/測試/用戶名= TEST1;密碼= passwdtest1」 - > 「?/測試/用戶名=生產;密碼= passwdproduction1」

「/測試/?username = test1876; password = somepasswd「 - >」/ test /?username = production; password = passwdproduction1「

」/ test /?username = somevalues; password = somepasswdvalue「 - >」/ test /?username = production; password = passwdproduction1「

因此,獨立於什麼是「?username = somevalues; password = somepasswdvalue」的值應該總是變成「?username = production; password = passwdproduction1」。

感謝您的幫助!晚

+0

更新:我解決這種方式:'位置〜/測試/ { 如果(的$ args〜 「用戶名=(+);密碼=(+)」){ 重寫^ * $「/ test /?username = production; password = passwdproduction1「break; }' – Fabio

回答

0

一點就知道答案,這應該爲你工作:

location ~* /test/? { 
    if ($arg_username ~ "^$|\s+") { return 404; } 
    if ($arg_password ~ "^$|\s+") { return 404; } 
    rewrite^/test?username=production&password=passwdproduction1? permanent; 
} 

上面的代碼檢查,如果是example.com/test路徑中。如果是,它將檢查用戶名或密碼變量是否存在並且在查詢字符串中不爲空。如果有任何不存在或是空的,它將返回404,否則它會將您重定向到首選的url。

順便說一下,而不是您的示例網址中的分號,我會使用&符號(&)。