50 responses to “CodeIgniter NGINX Rewrite Rules”

  1. Richard

    instead your URLs will be cleaner:
    Can you make an htaccess that will remove the controller/method/
    and the result will be this.
    http://www.example.com/how to build house /id here

  2. leftinsane


    Trying this now and getting

    Invalid condition: "request_uri" on line 14
    …which is the first conditional after the enforce no www block.

    nginx 0.8.52
    php 5.3.3 / suhosin

  3. Luis

    These rules helped me a lot.
    Thanks man

  4. Erik

    unfortunately I’m having persiting problems getting my ISP- site statistics area working with Nginx…
    For Apache I was using following .htaccess snippet:

    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_URI} ^/(stats|failed_auth\.html).*$ [NC]
    RewriteRule . – [L]

    But now, being on Nginx, I don’t can find any rewrite rule for…
    Any help would be real great.
    Thanks lot in advance!


  5. Erik

    I added your rule and reloaded Nginx today. There was no site blocking AND the site statistics is opening with the old content before I moved to Nginx – that looks great at first.
    Will take a look at my ISP- site statistics area tomorrow for updated stats – I’ll report here if the rule is working.

  6. Erik

    @ Dimas
    now I got acces to the ISP- site statistics area at http://domain.com/stats/, but unfortunately the the stats aren’t updating (last daily report from 2010-12-16 at http://domain.com/stats/daily/2010-12-16/index.html)…

  7. Azmi

    Hi, why my output always 404 Page Not Found with your tutorial? Let me now to solve it

  8. tuurtnt


    thanks for the rules… I have one problem, this doesn’t seem to work with multiple codeigniter applications

    I have a frontend and backend (application/frontend & application/backend). I use a index.php and a admin.php in the root. The index.php works fine, but for the admin.php (www.test.com/admin.php/controller/method) this doesn’t work… Any fix for this?


  9. tuurtnt

    And you should use: try_files (instead of: if (!-e $request_filename))


  10. tuurtnt

    ok I will try to figure it out… I have one question, what does the $ mean in (location ~ \.php$)

  11. tuurtnt
  12. VangelisB

    Hello. Thanks for posting this, worked like a charm.
    However I got a problem with $_POST returning always an empty array.
    The same code in apache works fine. Ever run into it ?

  13. firman

    thank you for ur amazing article.
    i’ve tried ur article but it doesn’t work. I always got 403
    can u translate this to me ? i really have no idea about this
    my default controller is home

    RewriteEngine On
    RewriteCond %{REQUEST_URI} ^system.*
    RewriteRule ^(.*)$ index.php?/$1 [L]

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?/$1 [L]

  14. crav3n

    Hi Dimas does above config also apply in new version of codeigniter? I have currently using version 2.0.2

  15. Jared

    You sir, are a scholar and a gentleman. I recently made the transition to nginx and you eliminated the last hitch!

  16. Winoto

    Hi Dimas,

    I am new in Nginx and I must convert .htaccess rule to work with Nginx.
    What’s the file name of this config and where’s the place? is it on the folder like .htaccess?

    Thank you very much,

  17. Burçlar

    Nice job. It’s very helpful article. I fixed my problem with this article. I love codeigniter with nginx!

  18. spondbob

    hi, i just download fresh codeigniter and upload it to my server with nginx. i applied your configuration for my nginx server, then i open the website and i got the welcome page.
    but when i try access it like http://server/index.php/welcome i got “500 Internal Server Error”, what should i do next?

  19. Sepehr

    But what is the filename of this config?
    Where should I place this file?

  20. james

    since you have the catch all line:

    rewrite ^/(.*)$ /index.php?/$1 last;

    then later you have the

    location ~ \.php$ { }

    my question are:

    why the question mark in the end of index.php?

    why only matching address ended with .php? in that case, /index.php?/controller/method/variable won’t be able to translated to /controller/method/variable

    I had to change the lines to the following..

    rewrite ^/(.*)$ /index.php?/$1 last;
    location ~ \.php { }

  21. james

    ok. I take it back what I said above. it turns out the question mark in “rewrite ^/(.*)$ /index.php?/$1 last;” makes “location ~ \.php$ { }” match. so I was wrong 🙂

  22. Mohammed Islam


    Thank you for this nice article.

    I am looking to redirect robots.txt to robots-off.txt could you tell what is the nginx rule I need for that?

    Thank you!

  23. Bonjovax

    Your Rewrite rule for Nginx is Superb!

    Thanks 🙂

  24. Alex W

    Thank you so much. This saved hours of my time! Exactly what i was looking for!

  25. Sonu

    How can we redirect URL with .htaccess file.I want to redirect only 1 URL rest will be the same.Please help me….

  26. Sonu

    Hi Dimas,Thanks for your reply.I had try this but it is not working.I am using Codeigniter V1.7 & already rewrite most of the URL’s with .htaccess but unable to redirect URL’s with 301.Do you have any solution for this situation?

  27. Sonu

    Hi Dimas,I can’t show it publicly.My client won’t allow to do so because their privacy hope you understand.But,you can check the below code to know how it looks :

    RewriteEngine On
    RewriteBase /

    I had copied first & last line from that file.Hope it would get some solution!

  28. Sonu

    The first & last line automatically removed.Hope it gives you hint for it IfModule.


  29. Sonu

    Hey Thanks Dimas.This Works! I had recreate complete .htaccess file.It has lots of issues the client has used 2 types of rewrite rules.Might that was causing a problem.

    Thanks for your help!!!

  30. Decibel3276

    Thanks for this excellent post Dimas but I’m having problems. I get a message saying that the “server” directive is not allowed here in /etc/nginx/sites-enabled/000-apps.vhost and if I remove the server directive there I get the same error in /etc/nginx/sites-enabled/000-ispconfig.vhost.

    Any ideas?

  31. Zack

    Thanks .. using this with winginx 😉

    location ~ \.php$ {
    if (!-e $document_root$document_uri){return 404;}
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;

  32. Jimmy

    After hours of searching and scratching my head.. here you are. Thanks, this worked like a charm. Keep up the good work!

  33. Galvin Wolf

    Nginx is very helpful to developer because developer is easy run to his appliafcation by Nginx.That is good information, it is useful to me thanks.

  34. Jimmy

    Great article! After scratching my head for an hour your article helped. But there is one issue, as all the requests are passing in this format “/index.php?/$1”
    It becomes a problem if i am passing some GET parameters using.
    Example if i pass GET param “name” to controller “page” it becomes “/index.php?/page&name=something”

    Any way to solve this issue?

  35. Jim Bowes

    Hey Dimas,

    Great article – I’m just wondering if you’ve ever got Nginx serving Codeigniter and WordPress together successfully?

    I’m trying to do that at the moment we have a folder for Codeigniter files e.g. /ci and one for WordPress /site


  36. abz89

    After somehour googling and testing without any luck..
    Finally found your article!!

    Work like a charm..

    But one question, i’m n00b in nginx
    where should I put the PHPMyadmin block on these??


  37. Jayson


    Am I putting this rewrite rule properly? /etc/nginx/sites-available/default?

    How come I copy-pasted it on the said file and it does not work?

    The URL I am using is : http://ipaddress/proj/index.php?/controller

    Where it should just be: http://ipaddress/proj/controller

  38. Ph1L

    Old post, but still worth a try.
    Using ISPConfig 3 with NGINX, and want to host a Joomla website 1.5, with SEF enabled.

    Howto? Afaik, NGINX ignores .htaccess ?
    I want it to use the .htaccess provided by Joomla.

  39. Ph1L

    Seen it too, but seems like it doesn’t wanna play with ISPConfig 3, grr 🙂

  40. eric

    “IfIsEvil” is kind of a key to nginx, though. Forcing nginx to evaluate and process many different IF statements is not considered a good practice.

    I’d recommend try_files.

    Check “Front Controller Pattern Based Packages”