2013-02-21 66 views
2

我已經創建了一個try_files指令,用於嘗試不同目錄中的文件,而不是放入文件。即,如果我訪問www.example.com/home/main,它將嘗試文件/var/www/main/home/main.php。它可以工作,但是當我訪問一個頁面時,它只顯示PHP源代碼而不是處理頁面。這是我的指令:PHP在Nginx中沒有處理

location ~ /home/ { 
    index main.php 
    try_files /main$uri.php @404; 
    location \.php { 
     fastcgi_pass php_server; 
     include fastcgi_params; 
    } 
} 

關於如何讓頁面處理而不是顯示PHP源代碼的任何想法?

編輯附加信息:我試圖做一個Location指令,看起來像

location ~ /main/(.*)\.php { 
     fastcgi_pass php_server; 
     include fastcgi_params; 
} 

但這也不管用和網頁仍然只顯示源代碼。

+0

是PHP運行? – 2013-02-21 15:10:47

+0

是的,我做了一個'location〜\ .php'來處理根目錄中的PHP文件,並且這些文件都可以正常工作。 – josh 2013-02-21 15:12:21

回答

2

當然它會告訴你來源,因爲你沒有fastcgi_pass/home/位置做。

試試這個:

location /home/ { 
    try_files /main$uri.php @static; 
    fastcgi_pass php_server; 
    include fastcgi_params; 
} 

location @static { } 
+0

修好了,謝謝!我想這是因爲我沒有直接使用'.php'擴展名來提供PHP文件? – josh 2013-02-21 15:55:58

+0

來自['try_files'](http://nginx.org/r/try_files)文檔:_處理在當前上下文中執行。並注意,每個請求僅在一個位置上下文中處理。在你的配置中,它是'location \ .php'或'location〜/ home /'。 – VBart 2013-02-21 17:03:26

+0

還值得一提的是,我有一切正確,但PHP代碼使用PHP短標籤,所以我必須在/etc/php5/fpm/php.ini中設置short_open_tag = On',然後重新啓動'服務php5-fpm restart' – Ash 2015-12-14 17:51:21

-1

編輯:實際上,下面是錯誤的 - 最後一個參數總是用作重定向,如果在try_files指令中找不到其他文件。在這個例子中,它打到.php文件,但沒有被處理,所以@404沒有被擊中。但是,如果不存在@404示例,則無論如何找不到該文件都會失敗。

在沒有文件被發現,內部重定向到最後一個參數調用事件[...]最後一個參數是後備URI和必須存在,否則內部錯誤將引發。

來源:http://wiki.nginx.org/HttpCoreModule#try_files

@404try_files指令將發送PHP文件的末尾由 location @404指令,而不是你的PHP指令,它使用的FastCGI解析。

嘗試丟棄 @404或簡單的這樣做的: try_files $uri /main$uri.php;

+0

當我從'try_files'中刪除'@ 404'時,它仍然帶出了PHP源代碼的頁面。 – josh 2013-02-21 15:20:26

+0

所以當你在'/ home/page.php'訪問某個東西時,它能正常工作嗎? – 2013-02-21 15:25:12

+0

當我在'/ home.php'訪問某個東西時,它可以正常工作,但這是因爲我有一個專門用於'/'目錄的位置指令,但是沒有其他指令。我試圖改變位置指令來反映'/ home /'或'/ main/home /',但都不起作用。 – josh 2013-02-21 15:30:01