Nginx rewrite rule for CodeIgniter
You can add this to your config:
location ~* ^/(assets|files|robots\.txt) { }
This will work correctly with your location /
rule.
Your config also need to add root document and default index file.
...root /ftp/wardrobe;index index.php index.html index.htm;location / { try_files $uri $uri/ /index.php?/$request_uri;}location ~* ^/(assets|files|robots\.txt) { }...
You want to do this instead:
if ($request_uri !~ ^/(index\.php|assets|files|robots\.txt)) { rewrite ^/(.*)$ /index.php/$1 last;}
$request_uri is for the original URI request by the client. If you want the URI request AFTER other Nginx rewrite rules have processed it then you would use $uri. However, for what you are trying to do the prior would be the one you would want.
Also, you need to escape special regular expression characters like .
by using a backslash.
Please try this. It works for me.
server { server_name domain.tld; root /var/www/codeignitor; index index.html index.php; # set expiration of assets to MAX for caching location ~* \.(ico|css|js|gif|jpe?g|png)(\?[0-9]+)?$ { expires max; log_not_found off; } location / { # Check if a file or directory index file exists, else route it to index.php. try_files $uri $uri/ /index.php; } location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }}