Comparing two variables

hi

i wrote a module which is extracting certain values out of a session
that is stored in memcache and stores it into a variable in my nginx
config. so this seems to work fine so far.

now i’m trying to compare $uri with one of these variables and do a
rewrite accordingly. but it seems that the if that comes from nginx’
rewrite module cannot only compare a variable with a static string or
a static regex, but not with another variable.

is that true?

i’ve tried following and except this if everything works:


// get session from memcache
eval $session {
    set $memc_key $cookie_session_id;
    memc_pass session_memcache;
}

// extract username from session
php_session_parse $user $session

“symfony/user/sfUser/attributes|s:10:“subscriber”;s:11:“getNickname””;

// strip the formatting of the value, so that f.e. s:6:"drevil"

becomes drevil
php_session_strip_formatting $stripped_user $user;

// show all profile data
if ($stripped_user ~* $uri)
{
    rewrite . d41d8cd98f00b204e9800998ecf8427e:profile_prod$uri:full 

last;
}

// show public profile
rewrite . d41d8cd98f00b204e9800998ecf8427e:profile_prod$uri last;

i just found that with an = it works, but i need the comparison to be
case insensitive…

i was thinking if there is any way to lowercase or uppercase both
strings before the comparison, then i could do an =.

is there any way to lowercase or uppercase a string? otherwise i could
also write a very small module for that.

i would prefer to don’t have to use lua

Posted at Nginx Forum:

Hello!

On Mon, Jun 13, 2011 at 03:44:42PM +0800, Mauro Stettler wrote:

is that true?

Yes, regexps must be static. You may try something like this as a
workaround:

set $tmp "$var1:$var2";
if ($tmp ~* "^(.*):\1$") {
    ...
}

Maxim D.

thanks a lot, thats a really smart idea and it works.

i’m thinking if i should maybe write a module which is simply
uppercasing or lowercasing a variable, so that i don’t need this
workaround anymore. do you think there would be other people happy
about having that? via google i haven’t found any existing module to
do that.

anyway for now i’m going to deploy the workaround.

thanks