2013-02-21 39 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