PHP-FPM/ZF3 скачать php файл при попадании в корневой домен

Это сбило меня с толку. Когда я захожу на домен, он загружает index.php файл. Когда я захожу на домен /index.php, он работает нормально. Я пытался комментировать тут и там, просто не могу это исправить. Этот Zend Framework 3, У меня есть другой сайт PHP на том же сервере. Они в порядке. Я начинаю удивляться, что это ZF3 особенный сейчас.

Мой nginx такой:

server {
  listen       80;
  server_name  xxx.xxx.com;
  index index.php index.html;
  root         /data/www/xxx/public;

  location ~ \.php$ {
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_index index.php;
    include       fastcgi_params;
    fastcgi_param  SCRIPT_FILENAME /data/www/xxx/public/index.php; 
  }

  access_log logs/worth.jusfeel.cn.log main;
}

Я пробовал и другие настройки. Это то же самое. URL в адресной строке изменится на ..domain/index.php, но все же скачать index.php файл.

server {
  listen      80;
  server_name www.example.com;
  root        /var/www/www.example.com/myapplication;
  index       index.html index.htm index.php;

  location / {
    try_files $uri $uri/ /index.php$is_args$args;
  }

  location ~ \.php$ {
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include        fastcgi_params;
  }
}

1 ответ

Загрузка index.php file означает, что nginx не использует php-fpm для обработки файла. Наиболее распространенная причина этой ситуации - неправильная настройка между nginx и php-fpm.

Контрольный список:

  1. Убедитесь, что вы не отключили директиву cgi.fix_pathinfo в php.ini, Это обеспечивает реальный PATH_INFO/PATH_TRANSLATED поддержка CGI и она включена (1) по умолчанию.
  2. Убедитесь, что корень вашего виртуального хоста указывает на public каталог вашего приложения ZF3. В этом случае вам может понадобиться заменить его /var/www/www.example.com/myapplication в /var/www/www.example.com/myapplication/public
  3. Самая важная часть - вам нужна правильная директива fastcgi_split_path_info в location ~ \.php$ { } блокировать, так как все запросы PHP обрабатываются index.php, Эта директива определяет регулярное выражение, которое фиксирует значение для nginx $fastcgi_path_info переменная.

Например:

location ~ \.php$ {
  fastcgi_pass            127.0.0.1:9000;
  fastcgi_split_path_info ^(.+.php)(/.+)$;
  fastcgi_param           SCRIPT_FILENAME $document_root$fastcgi_script_name;
  include                 fastcgi_params;
}

Надеюсь, поможет.

Другие вопросы по тегам