28

我想在我的 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
4

2 回答 2

41

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

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

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

location ~ /[0-9]+ {
        rewrite "/([0-9]+)" /v.php?id=$1 break;
}
于 2013-03-10T14:24:49.367 回答
4

In my case, I needed to use 'last' to make it work due I had other rules that I wanted to be applied:

location ~ /[0-9]+ {
    rewrite "/([0-9]+)" /v.php?id=$1 last;
}
于 2019-05-07T08:58:36.820 回答