NGINX显示脚本代码而不是执行

时间:2014-01-14 20:40:10

标签: php nginx rewrite

我和NGINX有一个混乱让我疯了。我在VirtualBox上有Ubuntu 12.04.3 LTS。我按照这些说明安装了NGINX-MYSQL-PHP:

  1. 安装 php5-fpm ;
  2. /etc/php5/fpm/php.ini 中设置 cgi.fix_pathinfo = 0 ;
  3. /etc/php5/fpm/pool.d/www.conf
  4. 中设置 listen = var / run / php5-fpm.sock

    然后我在 / etc / nginx / sites-available / default 中设置:

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
    

    localhost info.php 都正确执行。现在我想建立一个本地网站,并尝试进行一些重定向。所以我在 / usr / share / nginx / www 中创建了一个名为 mywebsite 的新文件夹,在 index.php 里面放了一个echo指令,我重定向的PHP脚本,在 sites-available 中添加了一个新的配置文件,并在 sites-enabled 中添加了一个链接,并禁用了 application / octet- nginx.conf 中的流,以避免下载脚本文件。所以我将我的新配置文件设置如下:

    server {
        listen   80;
    
        root /usr/share/nginx/www/mysite;
        index index.php index.html index.htm;
    
        server_name www.mysite.com;
    
        location / {
          try_files $uri $uri/ /index.html;
          if (!-e $request_filename){
            rewrite ^/location/([0-9]+)/device/([0-9]+)/senseddata/$ /senseddata.php break;
            rewrite ^/location/([0-9]+)/device/([0-9]+)/senseddata/lasthour/$ /senseddata.php break;
            rewrite ^/location/([0-9]+)/device/([0-9]+)/senseddata/daily/$ /senseddata.php break;
          }
        }
    
        error_page 404 /404.html;
        error_page 500 502 503 504 /50x.html;
    
        location = /50x.html {
           root /usr/share/nginx/www;
        }
    
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        location ~ \.php$ {
           fastcgi_pass unix:/var/run/php5-fpm.sock;
           fastcgi_index index.php;
           fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
           include fastcgi_params;
           try_files $uri =404;
        }
    
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        location ~ /\.ht {
        deny all;
       }
    }
    

    那么究竟发生了什么? Index.php正确执行。重写很好但脚本没有执行。我只看到我在浏览器中显示的整个代码。有什么问题?提前谢谢。

2 个答案:

答案 0 :(得分:0)

尝试将fastcgi_split_path_info ^(.+\.php)(/.+)$;添加到location ~ \.php$并重新启动nginx。

我的配置示例

location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    try_files $uri =404;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

答案 1 :(得分:0)

同时检查PHP文件中的开始标记。如果您使用<?代替<?php并且short tag不可用,则不会解析PHP代码,您将看到源代码。