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

时间:2012-03-09 09:13:47

标签: php apache .htaccess http-status-code-404

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

ErrorDocument 404 /404.php

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

我没有在任何地方找到这个选项。

非常感谢。

3 个答案:

答案 0 :(得分:5)

不确定但尝试一下:

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

引自Files Directive文档:

  

&lt; Files&gt;指令限制了所附的范围   文件名指令。

答案 1 :(得分: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来获取要显示给用户的动态信息,例如所请求的资源路径。

答案 2 :(得分:1)

利用$_SERVER['REQUEST_URI'],您可以轻松检查导致错误的文件的结尾,然后如果它不符合您的需要或仅渲染不同的404,则将标头抛出到正常404 / p>

将它放在404.php文件中

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

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