2

我创建了一个 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;
}

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

4

2 回答 2

2

当然,它会向您显示来源,因为您fastcgi_pass所在的/home/位置没有。

试试这个:

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

location @static { }
于 2013-02-21T15:40:35.547 回答
-1

try_files编辑:实际上下面是错误的——如果在指令的其他任何地方都找不到文件,最后一个参数总是用作重定向。在这个例子中,它正在命中 .php 文件,但没有被处理,所以@404没有被命中。但是,如果不@404存在示例,那么无论如何找不到文件都会失败。

如果找不到文件,则会调用到最后一个参数的内部重定向 [...]最后一个参数是备用 URI,并且必须存在,否则将引发内部错误。

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

@404指令末尾的将try_files发送 php 文件以由location @404指令解析,而不是使用 fastcgi 的 php 指令。

尝试放弃@404或简单地做:try_files $uri /main$uri.php;

于 2013-02-21T15:17:38.367 回答