3

I'm trying to setup Codeigniter in a subdirectory of my domain. Currently I only get an 404 from Codeigniter on the index page. As soon as a want to go to example.com/api/welcome/index I get a 404 from nginx.

My nginx.conf:

location /api/ {
    alias  /var/www/api/;
    try_files $uri $uri/ /api/index.php =404;
    location ~ \.php$ {
        try_files $uri /index.php =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_index   index.php;
        fastcgi_pass    backend;
        include fastcgi_params;
        fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

and Codeigniter.conf:

$config['base_url'] = 'https:/example.com/api/';
$config['uri_protocol'] = 'REQUEST_URI';
$config['index_page'] = '';
masegaloeh
  • 17,978
  • 9
  • 56
  • 104
Arodes
  • 101
  • 1
  • 1
  • 6

2 Answers2

7

Got it working, the solution was to use $request_filename; instead of $document_root$fastcgi_script_name;

location /api/ {
    alias  /var/www/api/;
    try_files $uri $uri/ /api/index.php;

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_index   index.php;
        fastcgi_pass    backend;
        include /etc/nginx/fastcgi_params;
        fastcgi_param   SCRIPT_FILENAME $request_filename;
    }
}
Arodes
  • 101
  • 1
  • 1
  • 6
1

This has worked for me (nginx 1.18)

location ^~ /api {
    root /var/www/api;
    index index.php;
    try_files $uri $uri/ /api/index.php;

    location ~ \.php$ {
        try_files $uri /index.php =404;
        fastcgi_pass unix:/run/php/php7.1-fpm.sock;
        fastcgi_index index.php;
        fastcgi_buffers 16 16k;
        fastcgi_buffer_size 32k;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_read_timeout 600;
        include fastcgi_params;
    }

}