custom 403 error page quirk

megamic nginx-forum at nginx.us
Mon Nov 1 10:02:21 MSK 2010


Hi

I have been trying to imlement a custom 403 error page  - to be
triggered when the request method is not in HEAD,GET,POST. I started
with something like this (note I was specifically triggering the 403
error for GET requests for testing):

  root /htdocs

  location = /403.html {
        internal;
  }

  error_page 403 = /403.html;

  if ($request_method !~ ^(POST)$ ) {
     return 403;
  }

    location / {
        index index.html;
    }

For some reason, the above config *always* caused nginx internal 403
error page to be generated - instead of my custom page at
/htdoc/403.html.

After scouring forums and whatnot, I found a suggestion, which is to put
the if() inside the location block - like:

    location / {
        index index.html;

         if ($request_method !~ ^(POST)$ ) {
             return 403;
        }
    }

Doing this and everything seemed to work. I just don't understand why -
can someone explain this?

Cheers

Posted at Nginx Forum: http://forum.nginx.org/read.php?2,146462,146462#msg-146462




More information about the nginx mailing list