自定义 404 错误页面——仅适用于 PHP 页面

Posted

技术标签:

【中文标题】自定义 404 错误页面——仅适用于 PHP 页面【英文标题】:Custom 404 error page -- for PHP pages only 【发布时间】:2012-03-26 18:03:57 【问题描述】:

我有一个带有 htaccess 的 404 个性化页面

ErrorDocument 404 /404.php

它工作正常,但它需要所有 .jpg、.js、.css 等... 我希望它只使用 .php 并为所有其他人执行正常的 404 错误。

我在任何地方都没有找到该选项。

非常感谢。

【问题讨论】:

“它需要一切”是什么意思? 404是任何未找到的HTTP请求的响应代码,无论是php请求还是图像。 我的意思是,如果我访问 www.example.com/img/errorimg.jpg,他会引导我访问 www.example.com/404.php,而我不想那... 您可以尝试使用 URL 重写 (mod_rewrite) 来实现这一点——将请求重定向到任何不存在的 .php 文件到您的自定义 404.php——这是可能的(仅 3 或 4 行)跨度> 你为什么不想要那个? @Your Common Sense 我希望例如我在调用图像、js 或其他任何东西时出错......在控制台中它会出错<!DOCTYPE html... 而不是file xxx not found 当我们复制结构时很烦人。 【参考方案1】:

不确定,但试试看:

<Files ~ "\.php$">
    ErrorDocument 404 /404.php
</Files>

引用Files Directive 文档:

指令限制了包含的范围 文件名的指令。

【讨论】:

工作正常!非常感谢您的帮助:-)【参考方案2】:

有几种可能的方法,但我会做以下之一:

您可以按照@LazyOne 的建议使用mod_rewrite,仅将扩展名为.php 的文件重定向到您的自定义文档:

RewriteEngine on
RewriteCond %REQUEST_FILENAME !-f # Only redirect to error for files that don't exist
RewriteRule ^(.*)\.php$ /404.php [L]

或者您可以像您已经做的那样通过 PHP 错误处理程序引导所有内容,并使用 PHP 来确定请求的资源是否是 PHP 脚本:

<?php

  if (strtolower(substr($_SERVER['SCRIPT_URL'], -4)) != '.php') 
    // If the requested resource does not have a .php extension, include the standard error doc and exit
    include '404.html';
    exit;
  

  // Handle .php 404s here

第二种方法的缺点是您可能需要重写标准错误文档,以便它使用 PHP 获取动态信息以显示给用户,例如请求的资源路径。

【讨论】:

【参考方案3】:

利用$_SERVER['REQUEST_URI'],您可以轻松检查导致错误的文件的结尾,然后如果它不符合您的需求或只是呈现不同的404,则将标头抛出到正常的404

把它放在你的 404.php 文件中

$bad_url = $_SERVER['REQUEST_URI'];
$bad_extension = substr(strrchr($bad_url,'.'),1);

if($bad_extension != "php")
    //Not PHP
else
    //PHP

【讨论】:

以上是关于自定义 404 错误页面——仅适用于 PHP 页面的主要内容,如果未能解决你的问题,请参考以下文章

PHP中的自定义404错误页面

WordPress 搜索仅适用于帖子,不适用于页面

404错误页面的奇怪问题

自定义 403 页面适用于一种环境,而不适用于另一种环境

如何设置404页面,404错误页面自定义方法

wordpress 2003 系统 怎么设置 404 错误页面 都返回200 代码 带默认的404.php 文件