Query Rewrite Help

Hi,

Am suffering with a bit of writer’s block when it comes to query
rewrites.

I’ve got a rewrite rule that looks like :

rewrite ^/api/app/([^/]+)/([^/]+)/([^/]+)?$ /api/app/$1.php?p=$2&q=$3?
last;

I am having two problems :

  • I am getting 404 when I try to make a POST call to /api/app/login, I
    have to use the full suffix, i.e. api/app/login.php instead.

  • I want to make the last ([^/]+) optional, but seem to also be getting
    the same 404 if I forget to include it ?

Ideas most welcome, thanks !

Your PCRE is not right. You might interpret it in more ‘natural’
language
as:
/api/app/<anything but ‘/’>/<anything but ‘/’>/<anything but ‘/’
or
nothing>
The URI /api/app/login does not match it.

You have several ways of addressing that:

  • Rewrite you huge, do-it-all PCRE, adding optional, non-capturing
    groups
  • Split the rewriting rule in several versions, each addressing one
    depth
    level (eases readibility/maintenance/performance?)

I would also suggest you avoid using rewrite and replace it with
location/return as much as you could:
Scaleable NGINX Configuration: Igor Sysoev @nginxconf 2014 - YouTube

B. R.

Thanks !