当前位置: 首页 > 知识库问答 >
问题:

nginx(PHP fpm)下404 PHP页面的根路径不工作

卢锋
2023-03-14

如果我试图访问网站根目录中不存在的任何内容,即。http://example.com/unexisting.php,我使用以下配置从我的自定义404页面获得正确的好答案:

server_name example.com;
root        /path/to/example;
index       index.php;
error_page 404  /not_found.php;

location ~ index\.php
{
    try_files $uri/index.php =404;
    return 301 $scheme://$server_name/;
}

location ~ not_found\.php
{
    root        /path/to/example;
    allow all;
    internal;
    fastcgi_intercept_errors off;
    fastcgi_param SCRIPT_FILENAME $document_root/not_found.php;
    include fastcgi_params;
}

location = /
{
    try_files $uri/index.php @static;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_param SCRIPT_FILENAME $document_root/index.php;
    include fastcgi_params;
}

location ~ \.php$
{
    try_files $uri $uri/ =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_intercept_errors on;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

location @static
{
    try_files $uri $uri/ =404;
    expires max;
}

location /
{
    try_files /something_non_existing @static;
}

如果要访问根目录,请尝试访问文件夹。“http://example.com/unexisting_dir/unexisting.php“,404页面在屏幕上,但没有任何图形。因为日志中有“GET/unexisting_dir/images/some_image_for_404_page”之类的内容。png HTTP/1.1“和nginx不返回任何内容,因为它在用户请求中有一个错误的基。同时,我检查了$document_root是否有正确的基,所以php fpm工作得很好。

问题是,在为不存在的嵌套(嵌入)目录提供404页面服务时,如何让nginx忽略用户的URI(而不重定向和损害任何潜在的功能)?

非常感谢!

这是“fastcgi_params”(以防万一):

    fastcgi_param  QUERY_STRING       $query_string;
    fastcgi_param  REQUEST_METHOD     $request_method;
    fastcgi_param  CONTENT_TYPE       $content_type;
    fastcgi_param  CONTENT_LENGTH     $content_length;
    fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
    fastcgi_param  REQUEST_URI        $request_uri;
    fastcgi_param  DOCUMENT_URI       $document_uri;
    fastcgi_param  DOCUMENT_ROOT      $document_root;
    fastcgi_param  SERVER_PROTOCOL    $server_protocol;
    fastcgi_param  HTTPS              $https if_not_empty;
    fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
    fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;
    fastcgi_param  REMOTE_ADDR        $remote_addr;
    fastcgi_param  REMOTE_PORT        $remote_port;
    fastcgi_param  SERVER_ADDR        $server_addr;
    fastcgi_param  SERVER_PORT        $server_port;
    fastcgi_param  SERVER_NAME        $server_name;
    fastcgi_param  REDIRECT_STATUS    200;
    fastcgi_pass unix:/var/run/php5-fpm.sock;

共有1个答案

仲阳朔
2023-03-14

这里的问题不是nginx。它正确地返回not_found的输出。php

您需要确保输出包含图像的绝对路径,而不是HTML中的相对路径。例如。

<img src="/notfound.jpg" />

而不是

<img src="notfound.jpg" />

额外的正斜杠告诉浏览器从文档根目录而不是浏览器请求的当前“目录”请求图像。

 类似资料:
  • 功能介绍 获取页面路径报告数据,包括表格详情数据与趋势数据,所获取数据与 https://mtj.baidu.com 中报告数据一致 接口 https://openapi.baidu.com/rest/2.0/mtj/svc/app/getDataByKey 此处仅列本接口特有参数,公共参数请参考报告级API说明 参数名 参数类型 是否必须 描述 method string 是 visit/pa

  • 我正在尝试为我正在编写的程序使用其他JAR。 我安装了所有必需的文件,并将它们添加到类路径中,但Java无法识别这些包。 我在jar位置之间加了分号,但Java无法识别jar中的包。为什么会这样? 例如,我的类路径如下所示: .; C:\Program Files(x86)\Java\jre7\lib\exts\QTJava.zip;C:\用户\JOE\下载\aseymock-3.2\asymoc

  • 我的java bin文件夹包含java.exe @大卫华莱士 Microsoft Windows[版本6.3.9600](c)2013 Microsoft Corporation。保留所有权利。 C:\用户\Andy\AppData\漫游\Microsoft\Windows\开始菜单\Programs\Startup>

  • 我正在使用多根工作区功能查看我的c项目中的源文件以及几个外部库。我正在尝试使用cpptools扩展来实现intellisense和其他功能。我想在工作区级别相对于。code-workspace文件设置默认包含路径。使用${workspaceFolder}解析为包含所查看文件的文件夹的路径。是否存在始终解析代码工作区文件路径的环境变量?还是我可以设置一个配置变量,然后使用${config:varia

  • 我正在使用application.properties文件中指定的Spring Boot上下文路径,它工作得很好 Spring Boot 2.0及以上版本

  • 我正在尝试使用sping-boot-starter-webflow和reactive Netty创建sping-boot-2 REST api。我正在尝试根据要在Spring-Boot-2中定义的application.yml中定义的新属性设置上下文路径。 然而,它看起来像网络流量,Netty不使用/识别application.yml.中定义的这个属性 如果我使用spring boot start