Как заставить Nginx найти существующий индекс. php, если он запрашивается по его имени? - PullRequest
0 голосов
/ 26 января 2020

Я попытался установить Mamoto (бывший Piwik) на локальном веб-сервере (nginx через Docker) и у меня возникли следующие проблемы:

  1. запрос к http://localhost -> работает отлично (он уже выполняет index.php).

  2. запрос к http://localhost/index.php -> дает 404 (игнорирует существование index.php).

Что там происходит с Nginx?

Это мой nginx -конфиг:

server {
    server_name localhost;
    root /var/www;
    client_max_body_size 20M;

    index index.php;

    location ~ ^/(index|matomo|piwik|js/index|plugins/HeatmapSessionRecording/configs)\.php {
        fastcgi_pass php-upstream;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;
        try_files $fastcgi_script_name =404;

        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
        fastcgi_read_timeout 600;
        # Prevents URIs that include the front controller. This will 404:
        # http://domain.tld/index.php/some-path
        # Remove the internal directive to allow URIs like this
        internal;
    }

    ## deny access to all other .php files
    location ~* ^.+\.php$ {
        deny all;
        return 403;
    }

    location ~ \.(gif|ico|jpg|png|svg|js|css|htm|html|mp3|mp4|wav|ogg|avi|ttf|eot|woff|woff2|json)$ {
        allow all;
        ## Cache images,CSS,JS and webfonts for an hour
        ## Increasing the duration may improve the load-time, but may cause old files to show after an Matomo upgrade
        expires 1h;
        add_header Pragma public;
        add_header Cache-Control "public";
    }

    location / {
        # try to serve file directly, fallback to index.php
        try_files $uri $uri/ =404;
    }


}

Странная вещь здесь : когда я набираю "d ie ('test');" внутри index. php, я могу заверить, что index. php определенно доступен в этом месте и выполняется при каждом запросе без указания c имени файла, такого как «localhost». Но когда index.php запрашивается по имени (так внутренне работает Matomo), тогда выдается 404.

...