NGINX下载php文件

时间:2016-06-07 08:00:29

标签: php nginx

我有自己的MVC,其中包含大量具有此文件夹结构的应用程序:

  • 主要项目
    • 的index.php
    • 型号(目录)
    • 查看(目录)
    • 控制器(目录)
    • 子项目1(目录)
      • 的index.php
      • 型号(目录)
      • 查看(目录)
      • 控制器(目录)
    • 子项目2(目录)
      • 的index.php
      • 型号(目录)
      • 查看(目录)
      • 控制器(目录)
使用apache,一切正常。我想尝试使用Nginx,但是当我在浏览器上访问它时会下载index.php它不会执行它。

这是我在nginx上的设置:

    location / {
            # First attempt to serve request as file, then
            # as directory, then fall back to displaying a 404.
            # try_files $uri $uri/ =404;
            if (!-e $request_filename){ rewrite ^(.*)$ /index.php?rt=$1 break; }
            try_files $uri $uri/ /index.php$is_args$args;
    }

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

1 个答案:

答案 0 :(得分:0)

这两行:

if (!-e $request_filename){ rewrite ^(.*)$ /index.php?rt=$1 break; }
try_files $uri $uri/ /index.php$is_args$args;

尝试执行相同的功能。如果文件不存在,请尝试/index.php

第一行由于break失败,它试图在/index.php块而不是location /块中处理location ~ \.php$

要更正第一行,应使用last代替break。有关详细信息,请参阅this document

但如果您包含try_files行,则不需要if ... rewrite语句。以下内容执行类似的功能:

try_files $uri $uri/ /index.php?rt=$uri&$args;

我更喜欢try_files方法,但要么应该有效,但你不需要两者。 try_filesdocumented here。关于if块的使用,请注意this caution

另外,请注意location ~ \.php$块的一些问题:

  • 你错过了正则表达式中的反斜杠
  • try_files指令应以URI或= 404结尾 - 而不是两者