rewrite don't work in a multilanguage MVC site

Fernando García Torres olfativo at
Tue Oct 25 16:56:05 UTC 2011

Hi!Im trying to move from Apache to nginx (v1.1.6), but you know, rewrite newbie here... In my site when a user types he's redirected to, and all the other URLs are internally handled by an index.php. This is my actual Apache htaccess:
    RewriteEngine On
    RewriteCond %{HTTP:Accept-Language} ^en [NC]    RewriteRule ^$ /en/ [L,R=301]
    RewriteCond %{HTTP:Accept-Language} ^es [NC]    RewriteRule ^$ /es/ [L,R=301]
    RewriteCond %{REQUEST_FILENAME} !-f    RewriteCond %{REQUEST_FILENAME} !-d    RewriteRule (.*) index.php?ctr=$1 [QSA,L]
And this my translation to nginx:
    location / {            if (-f $request_filename) {                      expires 30d;                      break;              }
            if ($http_accept_language ~* "^es") {                    rewrite ^/$ /es/ permanent;                    break;            }
            if ($http_accept_language ~* "^en") {                    rewrite ^/$ /en/ permanent;                    break;            }
            if (!-e $request_filename) {                      rewrite (.*) /index.php?ctr=$1 last;              }      }    location ~ \.php$ {            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;            ...
With this, when I type I'm being redirected to, great, but I get a 404 error, and in the error.log I have this line:
    "/bla/bla/html/en/index.php" is not found 
So, why is not nginx looking for the URI /index.php?ctr=/en/? 		 	   		  
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the nginx mailing list