Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

URL Rewrite is not working in Nginx

URL rewrite is not working in Nginx and operating system is Ubuntu 12.4 Lts

when open http://mvc.loc it is working but when i try to open http://mvc.loc/login Not working

404 Not Found

nginx/1.1.19

.htaccess

<IfModule !mod_rewrite.c>
    ErrorDocument 500 "mod_rewrite must be enabled"
</IfModule>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?u=$1

virtual hosts for mvc.loc

server {
    listen 80;
    server_name mvc.loc;
    access_log /var/log/nginx/mvc.loc.access.log;
    error_log /var/log/nginx/mvc.loc.error.log;
    root /usr/share/nginx/www/mvc;

    index       index.php;


    # use fastcgi for all php files
    # Are you sure you have this set up?
    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    # deny access to apache .htaccess files
    location ~ /\.ht {
     deny all;
    }

}
like image 811
Parnit Das Avatar asked Dec 20 '22 23:12

Parnit Das


2 Answers

location / {    
   rewrite ^(.*)$ /index.php?u=$1 last;
}
like image 55
Nanhe Kumar Avatar answered Dec 28 '22 11:12

Nanhe Kumar


Well @NanheKumar's answer got the rewrite correct but it ignored the first 2 rules in the htaccess

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

This means check if the request doesn't match a file and doesn't match a directory, to imitate this exact behavior you can use try_files like this

location / {
    try_files $uri $uri/ /index.php?u=$request_uri;
}

This will make sure to serve requests that point to an asset or a directory directly first then if neither it would pass the request to index.php

EDIT: unless index.php is able to serve assets, this will cause all assets ( images, css, javascript, etc ) to show errors because index.php will be receiving arguments it's not expecting. Think about something like this http://example.com/index.php?u=/images/background.jpg

like image 39
Mohammad AbuShady Avatar answered Dec 28 '22 09:12

Mohammad AbuShady