这是我在这里的第一篇帖子,如果我遗漏了什么,请多包涵。
我有一个 htaccess 规则:
RewriteCond %{QUERY_STRING} ^soap=([^&]+)
RewriteRule ^/?index\.php$ http://backendserver.com /index.php?soap=%1 [L,R=302]
请求:
http://frontend.com/?soap=123
http://frontend.com/index.php?soap=123
都将我重定向到后端服务器。到目前为止一切顺利。
现在我正尝试从 apache2 转移到 nginx。
location / {
if ($args ~ "^soap=([^&]+)"){
#return 404;
rewrite ^/?index\.php$ http://www.zam24.de/index.php?soap=%1 redirect;
}
现在我有两个无法独自处理的问题:
我没有被重定向,但如果将“rewrite...”替换为“return 404;”,我就会得到 404。
如果我请求 index.php?soap=123 而不仅仅是 ?soap=123 它将忽略重写规则并“执行”index.php
我的完整 nginx-config 可以在以下位置找到:http://pastebin.com/ULRyNeZ4
感谢您的帮助!
答案1
您应该能够使用这个配置:
location / {
if ($arg_soap) {
rewrite ^ http://www.zam24.de/index.php?soap=$arg_soap redirect;
}
}
我们在这里测试soap
查询字符串中的参数。如果找到,我们将 URL 重写为目标,并将参数传递soap
给重写目标。
我们不需要使用正则表达式匹配/捕获,因为 nginx 已经在变量中提供了查询字符串参数。