在我的 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;
}