由于需要重定向 url ,nginx需要rewrite 。参考文献 http://huangqiqing123.iteye.com/blog/2083434

 

需求:将
http://10.106.1.30/uc/api/http.do?method=getLoginTicket&user_id=***&password=***
重写成
http://10.106.1.30/uc/?m=member&c=http&a=getLoginTicket&user_id=***&password=***

 

一般很自然想到的写法如下:
rewrite "^/uc/api/http.do?method=getLoginTicket&user_id=(.*)&password=(.*)$"  /uc/?m=member&c=http&a=getLoginTicket&user_id=$1&password=$2 break;

 

结果总提示404错误。

 

后经查阅资料得知,rewrite只能针对请求的URL中问号?之前的部分进行重写,问号后面的是请求参数,在nginx用$query_string表示,所以上面的重写,根本就没匹配成功。

 

正确的写法如下:
在nginx.conf配置文件中,添加如下配置
  if ( $query_string ~ "method=getLoginTicket(.*)" ){
          rewrite "^/uc/api/http.do$"  /uc/?m=member&c=http&a=getLoginTicket&$query_string break;
    }

 

下面是我自己的===========================================

http://www.abc.com/showContent?lpId=1

rewrite 成下面

http://www.abc.com/api.php?uri=/jumpConfig/showContent&lpId=1

 

#$query_string 匹配? 后面的字段 并将()里匹配的内容 赋予给$query_string.

location / {
if ( $query_string ~ "lpId=(.*)"){
rewrite "^/showContent$" /api.php?uri=/jumpConfig/showContent&lpId=$query_string last;
}
try_files $uri $uri/ /index.php?$args;
}