Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Nginx rewrite triggers download

I'm struggling with creating a simple rewrite url on nginx.
My configuration looks like this:

location /foo/bar {
    rewrite ^/(.+)$ /index.php?p=$1 break;
}

E.g. /foo/bar/baz should become /foo/bar/index.php?p=baz (internally of course)

However, everything accessed through /foo/bar/ triggers a download of an index.php located at the root. How do I get this to work ?

I've also tried using try_files but can't figure out how to exclude the /foo/bar/ path from $uri.


1 Answers

Change

rewrite ^/(.+)$ /index.php?p=$1 break;

to

rewrite ^/(.+)$ /index.php?p=$1 last;

Based on http://wiki.nginx.org/HttpRewriteModule#rewrite,

last - completes processing of current rewrite directives and restarts the process (including rewriting) with a search for a match on the URI from all available locations.

[Edit] Using break will stay inside the same location block. In your case, there is no other rules inside that location block. So by default, nginx will serve that as a file request.

like image 62
Chuan Ma Avatar answered Dec 02 '25 22:12

Chuan Ma