Hi, I’m fairly new to Nginx (an Apache convert) and have run into an
issue where my site works, but one particular POST function fails with
“No Input File Specified.” The POST is a port of an old IPBv2 script to
submit scores into a database via the URL: http://www.example.com/game/123/index.php?act=Arcade&do=newscore
I have verified permissions
In Apache, the RewriteRule was:
RewriteRule ^game/(.)/(.).php$ index.php?act=Arcade&do=newscore [L]
In nginx, I have:
rewrite ^/game/(.)/(.).php$ /index.php?act=Arcade&do=newscore last;
Here’s my site’s .conf (some info masked). Can anyone help point me in
a direction? I’m not sure what I’m missing and I’ve spent a solid 12
hours on it, so would greatly appreciate any help.
You need more than this here. Also rather than checking whether than
it starts with /uploads/ after entering uploads, you should create
separate location block to handle this url.
@Cliff - I tried what you said and got 404’s on any of the pages that
were being rewritten to .html pages, so it does seem that the rewrites
are being handled. Thanks for trying… I think that you might be onto
something with the processing order. I’ll have to take a look into it
in more depth. Frustratingly, I restored my backup vhosts .conf file,
and now it doesn’t seem to want to load any objects in the
/arcade/gamedata folder, which is preventing some of the games from
loading.
@Edho - What other information do you need? I didn’t want to put too
much for the sake of brevity, but I can post whatever you think might
help.
Ahh! It works! I made the php location too complex and realized where
it was bombing after getting a 404 on submit. It was much, much more
simple than what I had. Between the 404 and reading in the page that
Cliff linked me to (or maybe one of the pages linked there), it said
that most people try to do too much with index.php and that /index.php
usually works. It most certainly did. I’m thrilled.
I believe that what is happening is the .php$ location is matched
first, so your rewrite rules are never called for PHP scripts. See here
for the order Nginx processes locations:
Specifically, the sentence “The first matching expression stops the
search and nginx will use this location.” The / location is used as a
fallback in case no specific regex location is matched.
Instead, something like this might work (untested):