你好,我想要一个重写规则,但我不想重定向它,也不想请求一个 URL,但从另一个 URL 加载不同的内容。所以,我认为重写指令中的 last 和 break 标志是一个很好的解决方案。但是,它总是被重定向,我搜索了这个问题,他们说如果新的 URL 不是来自 nginx 实例,它就会重定向。下面是我的配置的几行:
...
rewrite ^(/\w+/$)(.+\.php) /$2 last;
proxy_pass upstream_name:80;
...
我想问的是如何使用重写但不重定向?
更新:例如,我想创建一个新的类似 /link/asd 的链接,但我的 Web 应用程序中没有 /link/asd。我希望我的 /link/asd 链接从 /asd 链接加载资源。然后,我认为重写最后一个标志是一个很好的解决方案。如果我的理解是错误的,请纠正我并解释一下。谢谢
答案1
如果您想要精确重写/link/example
为/example
,example
其中 为任意值,您可以使用以下命令rewrite
:
rewrite ^/link/(.+)$ /$1 last;
这也将匹配/link/example/something/else
,因为.+
匹配字符串结尾 ( $
) 之前的任何字符。如果要限制捕获组中允许的字符(例如,/
从捕获组中排除),可以使用[^/]+
正则表达式的符号。