Nginx 位置精确匹配无可争议

Nginx 位置精确匹配无可争议

在我的 nginx 配置中,我想捕获/foo-bar/并使用位置进行重写,但它会忽略/foo-bar/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  

谢谢。

答案1

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

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

我从来没有用过

/location/

答案2

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

如果这不起作用,那一定是臭名昭著的永久缓存响应301 Moved Permanently- 尝试您的请求以curl -v确保它起作用或不起作用,和/或清除 Gecko 或其他浏览器的整个缓存(在 Gecko 中没有其他办法解决它(除了清除整个缓存) - Shift-refresh 技巧不适用于301)。


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

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

相关内容