![在 nginx 中重写新 URL 并阻止旧 URL](https://linux22.com/image/797114/%E5%9C%A8%20nginx%20%E4%B8%AD%E9%87%8D%E5%86%99%E6%96%B0%20URL%20%E5%B9%B6%E9%98%BB%E6%AD%A2%E6%97%A7%20URL.png)
我有一个本地文件夹/bar
,我希望能够通过 访问http://www.example.com/foo
。
所以我有这样的配置
rewrite ^/foo/(.*)$ /bar/$1 last;
与此同时,我想堵塞公开访问真实网址/bar
,
然后我添加如下配置
location ~* ^/bar{ return 404; }
但是当我将此 url 添加到配置中时,上面的第一个配置不起作用,现在都返回404
为了让重写工作正常,我应该修复什么?
谢谢。
答案1
将“旧”位置标记为internal
:
location /bar {
internal;
# your /bar location directives
}
Nginx 仅当由于error_page
、rewrite
或X-Accel-Redirect
SSI 请求而发生“内部”位置时才处理它们(请参阅文档),否则会回复 404。