怀疑是 $2 没有匹配到内容,所以 $h_test 就是空了。
po主需要提供下出现问题时的 $request_uri 的值。只知道出错了,但不知道导致出错的输入,是没办法帮忙排查问题的。
另外,既然这里是 OpenResty 邮件列表,建议少用 Nginx 配置指令,多写点 Lua 代码。可能你还在纠结为什么某些 Nginx 指令效果不合预期的时候,别人已经写了上百行 Lua 代码了。
随便一提,$2 相当于一个名字叫 “2” 的 Nginx 变量,它的生命周期是整个请求而不是单个指令。
举个例子:
location /root {
if ($request_uri ~* ^/(.+)/(.*)$) {
}
set $h_test $2;
return 200 "str: $h_test: end";
log_by_lua_block {
ngx.log(ngx.ERR, ngx.var[2])
}
}
使用如上的 Nginx 配置,然后请求 /root/x,返回结果是 str: x: end,错误日志里面也有 x 这个值。
除非你了解 Nginx 内部工作原理,否则很难理解这个 $2 是什么时候出来的
所以再强调一遍:建议少用 Nginx 配置指令,多写点 Lua 代码。
在 2017年8月18日星期五 UTC+8上午9:27:22,Kwanhur Huang写道:
hello,
if ($request_uri ~* ^/(\d+\.\d+\.\d+\.\d+)/(.*)$) {
set $h_test $2;
return 200 "str: $h_test: end";
}
$2 参数的使用需紧跟正则表达式之后
类似rewrite的使用:rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 break;
On Thursday, August 17, 2017 at 10:03:04 PM UTC+8, steve shi wrote:
my nginx.conf:
server {
listen 80;
default_type text/plain;
location / {
if ($request_uri ~* ^/(\d+\.\d+\.\d+\.\d+)/(.*)$) {
set $h_test $2;
return 200 "str: $h_test: end";
}
------------------------------------------------------------------------
str: : end
--------------------
the $h_test is null
why
如果你看得懂这串文字,请用中文回复我
--