NGINX Location Matching Question - Case insensitive matching at the start of a URI

Hi,

I’m running in a somewhat urgent issue where I have to make a
case-insensitive location match on a URI segment that is at the
beginning of the URI.

so I want to match

/uri-segment/*
/URI-segment/*
/Uri-Segment/*
etc…

I know that this will match the start of the URI:
location ^~ /uri-segment

and this will match regardless of case:
location ~* /uri-segment(.*)

But chaining them together and using ^~*doesn’t seem to work. Is this
possible? If so what am I missing?

Thanks

On 5 December 2013 23:29, Brad Van S. [email protected] wrote:

/URI-segment/*
/Uri-Segment/*
etc…

I know that this will match the start of the URI:
location ^~ /uri-segment

It will, but that’s not what the regex-alike “^” means there. There,
it means “… and if this /does/ match, stop immediately and don’t
consider any regex matches”. See
http://wiki.nginx.org/HttpCoreModule#location for more information. (I
personally consider this a really bad choice of character by nginx -
it /always/ confuses me!)

and this will match regardless of case:
location ~* /uri-segment(.*)

But chaining them together and using ^~*doesn’t seem to work. Is this
possible? If so what am I missing?

Seeing how you said this is urgent, I’ll not do what I /normally/ do
and just give you pointers to the docs that’ll help you :slight_smile:

You want

location ~* ^/uri-segment(.*) { }

HTH,
Jonathan

Thanks for the quick response!

Looks like that is matching how I intend… however it (of course)
revealed another issue in my app layer :slight_smile: But at least the NGINX configs
seems correct now.

Thanks!