nginx 重写而不更改 url

问题描述 投票:0回答:2

我想在我的 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
nginx url-rewriting
2个回答
41
投票

参考:https://nginx.org/en/docs/http/ngx_http_rewrite_module.html#rewrite

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

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

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

4
投票

就我而言,我需要使用“最后”才能使其正常工作,因为我有其他想要应用的规则:

location ~ /[0-9]+ {
    rewrite "/([0-9]+)" /v.php?id=$1 last;
}
© www.soinside.com 2019 - 2024. All rights reserved.