2012-03-09 10 views
5

mam spersonalizowaną stronę do 404 z htaccessniestandardowa strona błędu 404 - dla stron PHP tylko

ErrorDocument 404 /404.php 

To działa dobrze, ale ma wszystko, .jpg, js, .css etc ...
Chciałbym po prostu wziąć .php i zrobić normalny błąd 404 dla wszystkich innych.

Nie znalazłem tej opcji w dowolnym miejscu.

Dziękuję bardzo.

+0

co masz na myśli przez „to bierze wszystko”? 404 to kod odpowiedzi dla każdego żądania HTTP, które nie zostało znalezione, bez względu na to, czy jest to żądanie php, czy obraz. –

+0

mam na myśli to, że jeśli zrobię www.example.com/img/errorimg.jpg, zaprowadzi mnie on do www.example.com/404.php, a ja tego nie chcę ... – user1040899

+0

Możesz spróbuj zaimplementować to za pomocą Przepisywania URL (mod_rewrite) - przekierować żądania do dowolnego nieistniejącego pliku .php do niestandardowego 404.php - to jest możliwe (tylko 3 lub 4 linie) – LazyOne

Odpowiedz

5

Nie jestem pewien, ale spróbuj tego:

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

Cytat Files Directive dokumentacja:

<Pliki> dyrektywa ogranicza zakres załączonych dyrektyw przez pliku.

+0

+1 Działa doskonale, i właśnie to OP zadał – ShadowScripter

+0

Działa dobrze! Bardzo dziękuję za pomoc :-) – user1040899

2

Istnieje kilka możliwych podejść do tego, ale chciałbym zrobić jedną z następujących czynności:

Można użyć mod_rewrite, jak sugeruje @LazyOne, aby przekierować tylko pliki z rozszerzeniem .php do dokumentu niestandardowego:

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

albo można kierować wszystko przez procedury obsługi błędów PHP jak już robić i korzystać z PHP w celu ustalenia, czy żądany zasób jest skrypt PHP czy nie:

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

Wadą tego drugiego podejścia jest to, że może być konieczne ponowne napisanie standardowego dokumentu błędu, tak aby użył PHP do uzyskania dynamicznych informacji do wyświetlenia użytkownikowi, takiemu, jak i żądanej ścieżce zasobu.

1

Wykorzystując $_SERVER['REQUEST_URI'], można łatwo sprawdzić zakończenie pliku, które doprowadziły do ​​błędu, a następnie wrzucić do normalnego nagłówek 404, jeżeli nie spełnia Twoje wymagania lub po prostu uczynić inny 404

umieścić to w pliku 404.php

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

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

wysłanie 301 zamiast 404 wygląda dość dziwnie –