nginx重写没有更改网址

时间:2013-03-10 13:36:17

标签: nginx rewrite

我想在我的nginx服务器中使用重写功能。

当我尝试“http://www.example.com/1234”时,我想重写“http://www.example.com/v.php?id=1234”并希望在浏览器中获得“http://www.example.com/1234”。

这是nginx.conf文件

...
  location ~ /[0-9]+ {
      rewrite "/([0-9]+)" http://www.example.com/v.php?id=$1 break;
  }
...

当我尝试“http://www.example.com/1234

我想......

url bar in browser : http://www.example.com/1234
real url : http://www.example.com/v.php?id=1234

但我遇到了麻烦......

url bar in browser : http://www.example.com/v.php?id=1234
real url : http://www.example.com/v.php?id=1234

2 个答案:

答案 0 :(得分:36)

参考:http://wiki.nginx.org/HttpRewriteModule#rewrite

  

如果替换字符串以http://开头,则客户端将被重定向,并且任何进一步的>重写指令都将被终止。

所以删除http://部分它应该可以工作:

location ~ /[0-9]+ {
        rewrite "/([0-9]+)" /v.php?id=$1 break;
}

答案 1 :(得分:0)

在我的情况下,由于需要应用其他规则,因此我需要使用“ last”使其生效:

location ~ /[0-9]+ {
    rewrite "/([0-9]+)" /v.php?id=$1 last;
}