Когда маршрут представляет собой файл PHP, на странице отображается ошибка.Не указан входной файл - PullRequest
0 голосов
/ 12 декабря 2018

Моя среда выглядит следующим образом:

  • версия Linux 4.4.0-105-generic (buildd @ lgw01-amd64-060) (версия gcc 5.4.0 20160609 (gcc)Ubuntu 5.4.0-6ubuntu1 ~ 16.04.5)) # 128-Ubuntu SMP чт 14 дек. 12:42: 11 UTC 2017
  • Версия Nginx: nginx / 1.14.1
  • PHP 7.2.13 (cli) (построено: 7 декабря 2018 16:36:58) (NTS)
  • Laravel 5.6

По историческим причинам мне пришлось использовать a.php в качестве маршрутадля моего проекта.

Когда я пытаюсь получить доступ к a.php после завершения настройки, на странице отображается следующее: Не указан входной файл.

И когда я получаю доступ к маршруту без phpфайл, он будет отображать страницу 404 laravel, это правильно, потому что этот маршрут я не установил

Так что я думаю, проблема в том, что маршрут находится в файле php.Когда маршрут переадресован, у меня возникают проблемы, которых я не знаю.К сожалению, я не могу решить это.

Моя конфигурация nginx выглядит следующим образом:

    server {
            listen   80; ## listen for ipv4; this line is default and implied
            listen   [::]:80 default ipv6only=on; ## listen for ipv6

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

            # Make site accessible from http://localhost/
            server_name _;

            # Disable sendfile as per https://docs.vagrantup.com/v2/synced-folders/virtualbox.html
            sendfile off;

            # Add stdout logging
            error_log /dev/null;
            access_log /dev/null;

            #static rewrite or try_files

            #core route redirect
            location / {
                try_files $uri $uri/ /index.php?$query_string;
            }

            error_page 404 /404.html;
            location = /404.html {
                    root /var/www/html/public;
                    internal;
            }

            # pass the PHP scripts to FastCGI server listening on socket
            location ~ \.php$ {
                    #include fastcgi_params;
                    fastcgi_param QUERY_STRING  $query_string;
                    fastcgi_param REQUEST_METHOD  $request_method;
                    fastcgi_param CONTENT_TYPE  $content_type;
                    fastcgi_param CONTENT_LENGTH  $content_length;
                    #fastcgi_param SCRIPT_FILENAME  $request_filename;
                    fastcgi_param SCRIPT_NAME  $fastcgi_script_name;
                    fastcgi_param REQUEST_URI  $request_uri;
                    fastcgi_param DOCUMENT_URI  $document_uri;
                    fastcgi_param DOCUMENT_ROOT  $document_root;
                    fastcgi_param SERVER_PROTOCOL  $server_protocol;
                    fastcgi_param GATEWAY_INTERFACE CGI/1.1;
                    fastcgi_param SERVER_SOFTWARE  nginx/$nginx_version;
                    fastcgi_param REMOTE_ADDR  $remote_addr;
                    fastcgi_param REMOTE_PORT  $remote_port;
                    fastcgi_param SERVER_ADDR  $server_addr;
                    fastcgi_param SERVER_PORT  $server_port;
                    fastcgi_param SERVER_NAME  $server_name;
                    fastcgi_param HTTPS   $https if_not_empty;
                    fastcgi_param REDIRECT_STATUS  200;
                    fastcgi_param HTTP_PROXY  "";

                    fastcgi_split_path_info ^(.+\.php)(/.+)$;
                    fastcgi_pass 127.0.0.1:9000;
                    fastcgi_index index.php;
                    fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
            }

            location ~* \.(jpg|jpeg|gif|png|css|js|ico|webp|tiff|ttf|svg)$ {
                    expires 2d;
            }
    }

Я попытался изменить значение cgi.fix_pathinfo в php.ini на 1

Затем возникает ошибка: файл не найден

Кажется, что он не оказывает влияния

Кроме того, моя локальная среда нормальная, но я использую valet локально, он интегрирует nginx и сделал несколькоизменения, я не могу сравнить разницу между его конфигурацией и сетевым окружением.

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Вчера я решил эту проблему следующим способом.

if (!-e $request_filename)
{
     Rewrite ^/(.*)$ /index.php?/$1 last;
     Break;
}

Однако я думаю, что ваш ответ более разумен. @ Richard Smith

0 голосов
/ 12 декабря 2018

Если URI не соответствует локальному файлу, в вашем блоке location / есть оператор try_files, который затем отправляется на контроллер Laravel (index.php).

URI, заканчивающиеся .php обрабатываются блоком location ~ \.php$.

Если вы хотите, чтобы URI, заканчивающиеся на .php, которые не соответствуют локальному файлу сценария, также отправлялись на контроллер Laravel, добавьте try_filesоператор в этом блоке тоже.

Например:

location ~ \.php$ {
    try_files $uri /index.php?$query_string;
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...