PHP未在Nginx中处理
我创建了一个try_files指令,该指令将尝试放置在不同目录中的文件。也就是说,如果我访问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 {
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