Nginx always searches index.php in the wrong directory

Hello!

I have a web root directory pointing to /var/www/html.

I have several subfolders in /var/www/html where I host different
projects.
Example: /var/www/html/chatserver

When I try to access http:// MYSERVER.net/chatserver I always have an
error
because Nginx tries to search for the index.php in the root web folder
instead of the actual subfolder.

This is my default server:

server {
listen 80;
listen [::]:80;
server_name MYSERVER.net www.MYSERVER.net;
return 301 https://$host$request_uri;
}

server {
listen 443 ssl;
listen [::]:443 ssl;
server_name MYSERVER.net www.MYSERVER.net;

ssl_certificate /etc/letsencrypt/live/MYSERVER.net/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/MYSERVER.net/privkey.pem;
ssl_trusted_certificate

/etc/letsencrypt/live/MYSERVER.net/fullchain.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_ciphers
‘ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA’;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_stapling on;
ssl_stapling_verify on;
add_header Strict-Transport-Security max-age=15768000;

resolver 8.8.8.8 8.8.4.4;

root /var/www/html;
index index.php index.html index.htm;

rewrite ^(.*\.php)(/)(.*)$ $1?file=/$3 last;

location / {
# try_files $uri $uri/ =404;
try_files $uri $uri/ /index.php?q=$uri&$args;
}

location ^~ /.well-known/ {
allow all;
}

location ~ [^/]\.php(/|$) {
fastcgi_index            index.php;
fastcgi_pass             unix:/var/run/php5-fpm.sock;
include                  fastcgi_params;
fastcgi_split_path_info  ^(.+\.php)(/.+)$;
fastcgi_param   PATH_INFO       $fastcgi_path_info;
fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}

Any help/ideas on how to solve this?
Thanks for reading!

Posted at Nginx Forum:

On Fri, May 06, 2016 at 03:22:25PM -0400, Issam2204 wrote:

Hi there,

when I use your configuration and make some guesses about the content
and requests, it seems to work for me.

That is:

if the directory /var/www/html/chatserver does not exist,
then /var/www/html/index.php is processed; otherwise
/var/www/html/chatserver/index.php is processed.

When I try to access http:// myserver.net I always have an error
because Nginx tries to search for the index.php in the root web folder
instead of the actual subfolder.

What output do you get from

curl -v myserver.net

? I expect a http 301 with a Location: of
https://MYSERVER.net/chatserver

Do you get something else?

Then do another “curl -v” with whatever Location: you got.

Eventually you will get one url which shows the problem that you
report. What is that one url?

With that specific url, it should be possible to work out which
location{}
you have told your nginx to use to handle it.

rewrite ^(.*\.php)(/)(.*)$ $1?file=/$3 last;
location / {
location ^~ /.well-known/ {
location ~ [^/]\.php(/|$) {

And from there, it may be more obvious where the problem that can be
solved is.

Cheers,

f

Francis D. [email protected]