PHP未在Nginx中处理

PHP未在Nginx中处理,php,nginx,Php,Nginx,我创建了一个try_files指令,该指令将尝试放置在不同目录中的文件。也就是说,如果我访问www.example.com/home/main,它将尝试文件/var/www/main/home/main.php。它可以工作,但当我访问一个页面时,它只显示PHP源代码,而不显示已处理的页面。这是我的指示: location ~ /home/ { index main.php try_files /main$uri.php @404; location \.php {

我创建了一个try_files指令,该指令将尝试放置在不同目录中的文件。也就是说,如果我访问
www.example.com/home/main
,它将尝试文件
/var/www/main/home/main.php
。它可以工作,但当我访问一个页面时,它只显示PHP源代码,而不显示已处理的页面。这是我的指示:

location ~ /home/ {
   index main.php
   try_files /main$uri.php @404;
   location \.php {
       fastcgi_pass php_server;
       include fastcgi_params;
   }
}
关于如何让页面进行处理而不只是显示PHP源代码,有什么想法吗

编辑以获取更多信息:我尝试制作一个位置指令

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

但这也不起作用,页面仍然只显示源代码。

编辑:实际上下面的错误-如果在
try\u files
指令中的任何其他地方都找不到文件,则最后一个参数始终用作重定向。在本例中,它正在命中.php文件,但未被处理,因此未命中
@404
。但是,如果不存在
@404
示例,则无法找到该文件将导致崩溃

如果未找到任何文件,将调用指向最后一个参数的内部重定向[…]最后一个参数是回退URI,必须存在,否则将引发内部错误

资料来源:

try\u files
指令末尾的
@404
将发送php文件,供
location@404
指令解析,而不是使用fastcgi的php指令


尝试删除
@404
或简单操作:
Try_files$uri/main$uri.php

当然它会显示源代码,因为您的
/home/
位置中没有
快速CGI\u通行证

试试这个:

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

location @static { }

是的,我做了一个
location~\.php
来处理根目录中的php文件,这些都很好。当我从
try_文件中删除
@404
时,它仍然会显示带有PHP源代码的页面。所以当你访问
/home/page.PHP
时,它工作得很好?当我访问
/home.PHP
时,它工作得很好,但这是因为我有一个专门针对
/
目录的位置指令,而不是其他目录。我试图更改location指令以反映
/home/
/main/home/
,但两者都不起作用。请将您的答案写在第一次阅读时有意义的地方;让任何人都能看到发生了什么变化。这就解决了问题,谢谢!我猜这是因为我没有直接使用扩展名
.PHP
?来提供PHP文件。从文档中可以看出:处理是在当前上下文中执行的。请注意,每个请求仅在一个位置上下文中处理。在您的配置中,它要么是
location\.php
要么是
location~/home/
。还值得一提的是,我一切正常,但php代码使用的是php短标记,因此我必须在/etc/php5/fpm/php.ini中
设置short\u open\u tag=On
然后重新启动
服务php5 fpm restart