nginx 正则表达式位置不匹配

nginx 正则表达式位置不匹配

我有下面的位置,它位于较大的 conf 文件中。

作为参考,这是有效的:

location = /scripts/news/admin/index.js {
       alias /my/file/path/news/scripts/admin/index.js;
}

然而,这未能拾取正则表达式(作为测试,我强制使用文件路径,但它仍然未被使用):

location ^~ ^/scripts/([a-z]+)/([a-z]+)/([a-z]+).js$ {
        alias /my/file/path/news/scripts/admin/index.js; # for testing, use direct file location
        break; # ensuring nothing else happens, for testing
        #alias /my/file/path/$1/scripts/$2/$3.js; # actual regex
}

我的正则表达式中是否遗漏了一些显而易见的东西?我试过了(.*)~*但都没有任何区别。使用的 URL 是:

http://example.com/scripts/news/admin/index.js

在我的日志中我看到:

2015/03/21 20:43:28 [debug] 16440#0: *183689 test location: "^/scripts/(\w+)/(\w+)\.js$"
2015/03/21 20:43:28 [debug] 16440#0: *183689 test location: "/"
2015/03/21 20:43:28 [debug] 16440#0: *183689 test location: "scripts/([a-z]+)/([a-z]+)/([a-z]+).js"
2015/03/21 20:43:28 [debug] 16440#0: *183689 test location: "thirdparty"
2015/03/21 20:43:28 [debug] 16440#0: *183689 test location: "skins"
2015/03/21 20:43:28 [debug] 16440#0: *183689 test location: ~ "\.(jpg|jpeg|gif|css|png|js|ico|html)$"
2015/03/21 20:43:28 [debug] 16440#0: *183689 using configuration "\.(jpg|jpeg|gif|css|png|js|ico|html)$"

为什么第三次入口没有捕获并停止?

答案1

我假设正则表达式匹配首先是最具体的,而不是首先按书写顺序。我的日志中显示的最后一个正则表达式是匹配并停止。

相关内容