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.
Контрольный список:
- Убедитесь, что вы не отключили директиву cgi.fix_pathinfo в
php.ini
, Это обеспечивает реальныйPATH_INFO
/PATH_TRANSLATED
поддержка CGI и она включена(1)
по умолчанию. - Убедитесь, что корень вашего виртуального хоста указывает на
public
каталог вашего приложения ZF3. В этом случае вам может понадобиться заменить его/var/www/www.example.com/myapplication
в/var/www/www.example.com/myapplication/public
- Самая важная часть - вам нужна правильная директива 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;
}
Надеюсь, поможет.