将 htaccess 重写规则转换为 nginx

将 htaccess 重写规则转换为 nginx

这是我在这里的第一篇帖子,如果我遗漏了什么,请多包涵。

我有一个 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;
}

现在我有两个无法独自处理的问题:

  1. 我没有被重定向,但如果将“rewrite...”替换为“return 404;”,我就会得到 404。

  2. 如果我请求 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 已经在变量中提供了查询字符串参数。

相关内容