2017-03-21 91 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。

顺便说一下,而不是您的示例网址中的分号,我会使用&符号(&)。