Nginx的位置精确匹配超越了争议

在我的nginxconfiguration中,我想捕捉/ foo /并使用位置进行重写,但忽略/ foo / anything-else

我试过了:

location = /foo-bar/ { 

 location ~ ^/foo-bar/$ { 

 location ~ /foo-bar/ { 

但它也捕捉并重写

 /foo-bar/?t=aaa-bbb-ccc 

我怎么只捕捉

 /foo-bar/ 

并不是

 /foo-bar/?t=aaa-bbb-ccc 

谢谢。

 location = /foo/ { rewrite ^ … redirect; } location ~ /foo/ { return 404; } 

如果这不起作用,它必须是301 Moved Permanently响应的臭名昭着的永久caching – 用curl -v试试你的请求,以确保它的工作或不工作,和/或清除你的Gecko的整个caching或其他浏览器(在Gecko中没有其他解决方法(除了清除整个caching) – Shift-refresh技巧不适用于301 )。


更新:如果还需要确保不接受任何参数(例如/ foo /?test),请使用以下命令:

 location = /foo/ { if ($args) { return 403; } rewrite ^ … redirect; } 

根据cnst答案中的评论线索,我用:

 if ($request_uri = "/foo-bar/") { rewrite ^ … permanent; } 

而我从来没有用过

 /location/