Nginx location rewrite 使用正则

一个 url https://www.example.com/knowledges/qa/123456 希望通过 Nginx 代理到 https://www.example.com/knowledges/qa.html?id=123456

Nginx 中配置如下:

root   /opt/statics;

location / {            
   index index.html;
}

location /knowledges/qa/ {
   rewrite ([^\/]+)\/?$ /knowledges/qa.html?questionId=$1 last;
}

其中正则 ([^\/]+)\/?$ 匹配到 url path 最后一部分,即 id。(见 https://regex101.com/r/CBuz0o/1/

更新
/knowledges/qa 后面加了一个斜杠 /knowledges/qa/,不加的话会 rewrite 死循环

现在能够正常访问了,但是在 qa.html 中拿到的 document.location 还是 Nginx 转发之前的 url,即 https://www.example.com/knowledges/qa/123456。怎么才能拿到 Nginx 转发后的 url https://www.example.com/knowledges/qa.html?id=123456

阅读 1.3k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题