2016-07-30 4 views
0

Cela m'a dérouté grand moment. Quand je visite le domaine, il télécharge le fichier index.php. Quand je visite domain/index.php, ça fonctionne bien. J'ai essayé de commenter ici et là, je ne peux pas le réparer. Celui-ci est Zend Framework 3. J'ai un autre site php sur le même serveur. Ils vont bien. Je commence à me demander si c'est ZF3 spécial maintenant.PHP-FPM/ZF3 télécharger le fichier php lors de la frappe du domaine racine

Mon nginx est comme ceci:

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; 
} 

J'ai essayé d'autres paramètres aussi bien. C'est le même. L'URL de la barre d'adresse passe à ..domain/index.php, mais le fichier index.php est toujours téléchargé.

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; 
    } 
} 

Répondre

0

Télécharger le fichier index.php signifie que nginx n'utilisant php-fpm pour traiter le fichier. La raison la plus commune derrière cette situation est une mauvaise configuration entre nginx et php-fpm.

Liste:

  1. Assurez-vous que vous ne l'avez pas désactivé la directive cgi.fix_pathinfo dans php.ini. Il fournit un vrai support PATH_INFO/PATH_TRANSLATED pour CGI et il est activé (1) par défaut.
  2. Assurez-vous que la racine de votre hôte virtuel pointe vers le répertoire public de votre application ZF3. Dans ce cas, vous devrez peut-être remplacer /var/www/www.example.com/myapplication-/var/www/www.example.com/myapplication/public
  3. La partie la plus importante est que vous avez besoin d'une directive fastcgi_split_path_info appropriée dans location ~ \.php$ { } bloc puisque toutes les requêtes PHP traitées par index.php. Cette directive définit une expression régulière qui capture une valeur pour la variable nginx $fastcgi_path_info.

Par exemple:

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; 
} 

Hope it helps.