Rewrite problem http://x.x.x.x/folder_name/index.php/css/first.css

Hello,
I made test against lighttpd and ngninx is 50% faster…

So I tried to use it with my already made application. (postgres &
php).
After setting evrything I found the URL to be a problem.

Apache and lighttpd can use URL
http://x.x.x.x/folder_name/index.php/css/first.css as
http://x.x.x.x/folder_name/index.php with REQUEST_URI part =
“/css/first.css” - this is handle by PHP and processed along…

Nginx is trying to open index.php as folder an of course 404 is
thrown…

I was trying to rewrite this URL but no success

my /etc/nginx/sites-available/default

...
server {
                listen           80;
#               listen           443 ssl;
                server_name jakasnazwa.localhost;

                ssl off;
                ssl_certificate /etc/nginx/server.crt;
                ssl_certificate_key /etc/nginx/server.key;

                root /home/main-www;
                index index.php index.htm index.html;

                error_log /var/log/nginx/website.error_log notice;
                #rewrite_log on;

                location ~ .php$ {
                  fastcgi_pass   127.0.0.1:9000;
                  fastcgi_index  index.php;
                  fastcgi_param  SCRIPT_FILENAME
/home/main-www$fastcgi_script_name;
                  include fastcgi_params;
                }

                location / {
                  autoindex on;
                  if (-f $request_filename) {
                        break;
                  }

                  if (!-e $request_filename) {
                         rewrite ^(.*)/index.php/(.+)$ $1/index.php/$2
last;
                        break;
                  }
                }
       }

Of course rewrite don’t change anything (cut and paste, part of url in
the same place) but I have no idea how to force nginx to fire php-fpm na
index.php file passing everything what is after this as parameter?

Can you point me to some clues or solution?

PS I know that URL should look different, but application is ready, I
don’t want to change it in this moment .

Regards
Mikolaj

Posted at Nginx Forum:

On Mon, Nov 07, 2011 at 11:17:14AM -0500, mikolajj wrote:

Hi there,

Apache and lighttpd can use URL
http://x.x.x.x/folder_name/index.php/css/first.css as
http://x.x.x.x/folder_name/index.php with REQUEST_URI part =
“/css/first.css” - this is handle by PHP and processed along…

Nginx is trying to open index.php as folder an of course 404 is
thrown…

Yes, that’s how it is frequently configured by default.

You’ll want to configure it to match your application.

            location ~ .php$ {
              fastcgi_pass   127.0.0.1:9000;
              fastcgi_index  index.php;
              fastcgi_param  SCRIPT_FILENAME

/home/main-www$fastcgi_script_name;
include fastcgi_params;
}

That location matches urls that end in “php”. Your url is
/folder_name/index.php/css/first.css, which doesn’t end in php,
so you’ll want to use some location setting that matches that url –
perhaps “starts with /folder_name/index.php/” will be best.

For testing, you could use “includes php”, which would be

location ~ php {}

but that is unlikely to be good for the live site.

Once you have the location definition correct, you’ll want to use
fastcgi_split_path_info

http://wiki.nginx.org/HttpFcgiModule#fastcgi_split_path_info

and then you’ll probably want to set PATH_INFO or REQUEST_URI or
whatever
your application requires, like in the example there.

Can you point me to some clues or solution?

Hopefully the above makes sense.

Either change your current “php” location to match all urls you want
handled by php; or make a new one that matches this location.

And use fastcgi_split_path_info.

And the debug log can be very useful if you get lost.

Good luck,

f

Francis D. [email protected]