2012-03-09 196 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