2012-03-09 11 views
5

Ben htaccess ile 404 için kişiselleştirilmiş sayfaÖzel 404 hata sayfası - PHP sayfaları için sadece

ErrorDocument 404 /404.php 

Düzgün çalışır, ancak .css vb, .jpg .js her şeyi alır ...
Sadece .php'yi alıp diğerleri için normal bir 404 hatası yapmak istiyorum.

Bu seçeneği hiçbir yerde bulamadım.

Çok teşekkür ederim.

+0

siz "her şeyi alır" ne demek istiyorsunuz sizin 404.php dosyasında bu koy? 404 php isteği veya bir resim olursa olsun bulunmayan herhangi bir HTTP isteği için bir yanıt kodudur. –

+0

demek istediğim, www.example.com/img/errorimg.jpg adresini seçtiğimde, www.example.com/404.php adresine yönlendirecek ve bunu istemiyorum. – user1040899

+0

Bunu URL Rewriting (mod_rewrite) ile uygulamaya çalışın - herhangi bir mevcut olmayan .php dosyasına isteklerinizi özel 404.php'ye yönlendirin - bu mümkün (3 veya 4 satırda) – LazyOne

cevap

5

emin değil bu bir deneyin ama:

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

Alıntı belgeleri Files Directive den:

<Dosyalar> yönergesi dosya çevrelediği yönergelerin kapsamını sınırlar.

+0

+1 Mükemmel çalışıyor ve OP'nin – ShadowScripter

+0

İşleri için sorduğu şey tam! Yardımınız için çok teşekkür ederim :-) – user1040899

2

Buna birkaç olası yaklaşımlar vardır, ancak aşağıdakilerden birini yapacağını: @LazyOne önerdiği gibi

Sen özel belgeye .php uzantılı dosyaları yeniden yönlendirmek için, mod_rewrite kullanabilirsiniz:

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

Yoksa zaten yaptığı gibi PHP hata işleyicisi aracılığıyla her şeyi yönlendirmek ve istenen kaynak PHP komut dosyası olup olmadığını belirlemek için PHP kullanabilirsiniz:

<?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 

Bu ikinci yaklaşımın dezavantajı, standart hata belgesini yeniden yazmanız gerekebilir, böylece kullanıcıya ve istenen kaynak yoluna görüntülemek için dinamik bilgi almak için PHP'yi kullanmanız gerekir.

1

$_SERVER['REQUEST_URI'] Yararlanma, kolayca hatayla sonuçlandı dosyanın sonunu kontrol ederek eğer ihtiyaçlarınıza uygun ya da sadece farklı bir 404

hale etmezse o zaman normal bir 404 bir başlık atmak

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

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

404 yerine 301 göndermek oldukça garip görünüyor –