2012-03-09 185 views
5

我有一个个性化页面404 htaccess的自定义404错误页面 - 为PHP页面只

ErrorDocument 404 /404.php 

它工作正常,但它需要的一切.JPG,.js文件,的CSS等...
我希望它只是采取.php并为所有其他人做一个正常的404错误。

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

非常感谢。

+0

你是什么意思“就需要一切”是什么意思? 404是任何未找到的HTTP请求的响应代码,无论这是PHP请求还是图像。 – 2012-03-09 09:19:28

+0

我的意思是,如果我做www.example.com/img/errorimg.jpg他会带我到www.example.com/404.php,我不想那个...... – user1040899 2012-03-09 09:21:24

+0

你可以尝试使用URL重写(mod_rewrite)实现 - 将请求重定向到任何不存在的.php文件到您的自定义404.php - 这是可能的(仅限3或4行) – LazyOne 2012-03-09 09:50:29

回答

5

不知道,但试试这个:

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

报价从Files Directive文档:

的<文件>指令由filename限制了封闭 指令的范围。

+0

+1它完美的工作,这就是OP要求的 – ShadowScripter 2012-03-09 12:21:50

+0

工作正常!非常感谢您的帮助:-) – user1040899 2012-03-13 02:53:07

2

有几种可能的途径来这一点,但我会做下列之一:

您可以使用mod_rewrite,通过@LazyOne的建议,只有文件重定向与.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来获取动态信息以显示给用户,例如请求的资源路径。

1

利用$_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 
} 
+0

发送301而不是404看起来很奇怪 – 2012-03-09 12:08:25