2016-06-07 141 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

內部服務器錯誤意味着查看日誌文件。如果再次卡住,請發佈新問題。快樂調試! –