Hello!
2013/7/8 jie123108:
> 如下代码,我在 location /test 中设置了参数name为name001,在 /test中 输出 name参数可以提到name001.
> 当进行rewrite后,在 /t2中,再输出 name后,客户端显示为空。
> 看起来ngx.req.set_uri_args设置的参数只在当前location有效,跳转后就失效了。
> 有何解决办法?
>
这里并不是因为跳转后失效,而是因为 rewrite_by_lua 总是运行在 rewrite 指令之后,即使你把前者写在前面。所以当
rewrite 指令执行跳转时,你的 rewrite_by_lua 指令压根还没来得及运行。
有两种解法,推荐第 1 种:
1. 在 Lua 里面执行跳转,比如通过 ngx.req.set_uri 函数:
http://wiki.nginx.org/HttpLuaModule#ngx.req.set_uri
利用这个 Lua 接口可以实现 rewrite 指令的所有功能。而且不用担心配置指令的运行顺序方面的问题。
2. 在 http {} 配置块中添加下面这条配置指令以禁用 rewrite_by_lua 指令推迟到 ngx_rewrite
模块的指令运行完之后再执行的行为:
rewrite_by_lua_no_postpone on;
这样 rewrite_by_lua 指令便总是运行在 rewrite 指令之前。更多细节可以参见 ngx_lua 的官方文档:
http://wiki.nginx.org/HttpLuaModule#rewrite_by_lua_no_postpone
Regards,
-agentzh