Try_文件未命中PHP(NginX配置)
下面是我的nginx.conf 对于不存在的文件,可以使用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$
/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;