Parsing Variables to access them in a custom module

Maxim Dounin mdounin at mdounin.ru
Thu Jun 7 10:36:54 UTC 2012


Hello!

On Thu, Jun 07, 2012 at 09:02:44AM +0400, Vladimir Shebordaev wrote:

> 2012/6/7 Prudhvi Krishna Surapaneni <me at prudhvi.net>:
> > Hi All,
> >        I am trying to write a module that needs to consume the regex matched
> >        variables like $1 and $2 and pass them as values to the module.
> >
> >        Here is what i am trying to do
> >
> >        /* -- CONFIG -- */
> >
> >                        location ~ /foo/([a-zA-Z0-9]+)/bar/([0-9]+) {
> >                                my_module;
> >                                my_module_first $1;
> >                                my_module_second $2;
> >                        }
> >
> >        /* -- CONFIG -- */
> >
> >        Inside my module i have defined them as follows.
> >
> >        /* -- CODE -- */
> >
> >                typedef stuct {
> >                        ngx_str_t my_module_first;
> >                        ngx_str_t my_module_second;
> >                } ngx_http_my_module_loc_conf_t
> >
> >    /* -- CODE -- */
> >
> >        When trying to access the values from those variables i get the
> >        value $1 and $2 instead of the substitution. What am i missing?.
> >
> >        Are these variables only availble for the rewrite module?.
> 
> Not particularly. But you should use the script engine to get captures
> evaluated at run-time. See, e.g.  proxy module for an example.

I would rather recommend using complex values here, as it's 
simpliest way to use variables.

Basically all it needs is using ngx_http_set_complex_value_slot 
instead of ngx_conf_set_str_slot in configuration directive 
definition, and an additional ngx_http_complex_value() call before 
use.

Complete example can be found in secure link module.

Maxim Dounin



More information about the nginx-devel mailing list