21

server { }我有这个配置在空定义中按预期工作

location ^~ /foo/ {
    alias /var/www/foo/;
}

但是,当我将它移到一个更大的服务器定义中(用于 WordPress 多站点配置)时,它会停止工作并且 wordpress 会响应它(这显然不是我的意图)。

我试图放在服务器块的开头或结尾,但这并没有改变它。

如何强制 Nginx 使用此位置?

4

3 回答 3

27

您可能正在寻找break.

location ^~ /foo/ {
    alias /var/www/foo/;
    break;
}

HttpRewriteModule文档中:

last- 完成当前重写指令的处理并重新启动该过程(包括重写),并从所有可用位置搜索 URI 上的匹配项。

break- 完成当前重写指令的处理,非重写处理仅在当前位置块内继续。

请注意,外部位置块,last 和 break 实际上是相同的。

于 2012-12-27T05:39:29.570 回答
3

Nginx 中的位置块是独占的。如果您使用location ^~其他规则,则静态对象的到期标头可能不适用,除非您将这些规则复制为嵌套在同一位置块下。

如果你可以分享你的完整配置,那么我可以让它为你工作。您很可能需要使用嵌套的位置块。

于 2014-08-05T10:35:20.850 回答
0
location = /aliasname/ { 
  alias /path/to/alias/
}

如果 URI 中不存在尾随斜杠,则会出现问题。请参阅https://www.digitalocean.com/community/tutorials/understanding-nginx-server-and-location-block-selection-algorithms#matching-location-blocks

于 2017-01-10T20:36:06.180 回答