2016-06-07 110 views
2

我有我自己的MVC,里面有这个文件夹结构一堆应用程序:NGINX下载PHP文件

  • 主项目
    • 的index.php
    • 模型(目录)
    • 查看(目录)
    • 控制器(目录)
    • 子项目1(目录)
      • 的index.php
      • 模型(目录)
      • 视图(目录)
      • 控制器(目录)
    • 子计划2(目录)
      • 的index.php
      • 型号(目录)
      • 查看(d irectory)
      • 控制器(目录)

一切工作正常与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; 
    } 

回答

0

的两行:

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

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

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

要更正第一行,应使用last而不是break。详情请参阅this document

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

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

我更喜欢try_files的方法,但无论是要工作,但你并不需要两个。 try_filesdocumented here。注意this caution关于使用if块。

另外,还要注意一些问题,您location ~ \.php$块:

  • 你缺少你的正则表达式一个反斜杠
  • try_files指令应以URI结束或= 404 - 不能同时
+0

感谢您清除关于break和last的信息。 我试图重写.htaccess文件来重写nginx。 最后一个问题是当我打电话给这个网址。 http://xxx.xxx.xxx.xxx/mainproject/ index.php激发它正确地重定向到我的登录http://xxx.xxx.xxx.xxx/mainproject/login/但响应是内部服务器错误它不获取应调用相应控制器的主项目的index.php。 –

+0

内部服务器错误意味着查看日志文件。如果再次卡住,请发布新问题。快乐调试! –