Try_文件未命中PHP(NginX配置)

Try_文件未命中PHP(NginX配置),php,nginx,Php,Nginx,下面是我的nginx.conf 对于不存在的文件,可以使用/index.php 但是当我的URL是/foo/bar=>/foo/bar/index时,php通过下载作为php源代码 有什么想法吗 try_files $uri $uri/ $uri/index.php /index.php; location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME $document_root$

下面是我的nginx.conf

对于不存在的文件,可以使用
/index.php

但是当我的URL是
/foo/bar=>/foo/bar/index时,php
通过下载作为php源代码

有什么想法吗

try_files $uri $uri/ $uri/index.php /index.php;

location ~ \.php$ { 
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}
我的配置

index index.html index.htm index.php;
location ~ \.php$ {
        fastcgi_pass unix:/tmp/php-fpm.sock;
        include fastcgi_params;
      }

重新加载nginx和fastcgi两者

解决方案是添加index.php

    index index.php

    try_files $uri $uri/ $uri/index.php /index.php;

    location ~ \.php$ { 
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

我也有同样的问题。当我在PHP上下文(
location~ ^(+.+\.PHP)(.*)${…
)中有以下内容时:

…它总是返回404。最后我读到了,上面写着:

文件的路径是根据root和alias指令从file参数构造的


我只为每个位置块定义了
alias
(当然,PHP-FPM块中没有),但没有在任何地方设置总的
根目录,因此NGiNX不知道在哪里查找文件。一旦我为服务器块设置了根目录,它就开始工作了。

我说的是try_文件。实际上,我需要更多的模式来使用try_文件,如drupal和passenger。但是添加index.php解决了这个问题。谢谢。您启动了fas吗tcgi服务?:-)当然,如果我放了不存在的URL,它甚至会为最后一个选项/index.php提供服务。我也有同样的问题。如果我找到一个映射到不存在文件的URL,它会正确执行index.php。然而,如果我放了一个新的php文件并试图直接找到该文件,我会得到它的源代码。这是我能看到的与您的唯一不同之处s是我的,但不在某个位置内。请尝试\u files$uri$uri//index.php?$args;在上面的示例中,当您直接尝试/foo/bar/index.php时,会使用什么HEPPEN?实际上,解决方案是使用命名位置作为
try\u files
的最终参数。问题是内部重定向(即,尝试检查是否存在任何其他正则表达式,如PHP处理正则表达式)仅针对最终的回退参数发出。在您问题中的配置中,
/index.php
的请求甚至没有尝试匹配正则表达式。您的答案有效的原因是,如果访问了
任何内容
,则
索引任何内容
将发出内部重定向,从而导致实际的php正则表达式匹配。@MahmoudAl Qudsi您能否发布一个说明如何使用命名位置的答案
try_files $fastcgi_script_name =404;