2012-03-09 15 views
5

Ho una pagina personalizzata per 404 con .htaccesspersonalizzato pagina di errore 404 - per le pagine PHP solo

ErrorDocument 404 /404.php 

Funziona bene, ma ci vuole tutto .jpg, .js, css ecc ...
Mi piacerebbe solo prendere il file .php e fare un normale errore 404 per tutti gli altri.

Non ho trovato questa opzione da nessuna parte.

Grazie mille.

+0

che cosa si intende per "prende tutto"? 404 è un codice di risposta per qualsiasi richiesta HTTP che non viene trovata, indipendentemente dalla richiesta php o da un'immagine. –

+0

quello che voglio dire è che se faccio www.example.com/img/errorimg.jpg mi condurrà a www.example.com/404.php, e non voglio che ... – user1040899

+0

Puoi prova a implementarlo con Riscrittura di URL (mod_rewrite) - reindirizza le richieste a qualsiasi file .php non esistente sul tuo 404.php personalizzato - è possibile (solo 3 o 4 linee) – LazyOne

risposta

5

Non sono sicuro, ma dare una prova:

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

Citazione di Files Directive documentazione:

La direttiva <Files> limita il campo di applicazione delle direttive racchiusi per nome di file.

+0

+1 Funziona perfettamente, ed è proprio quello che OP ha richiesto per – ShadowScripter

+0

Funziona bene! Grazie mille per il tuo aiuto :-) – user1040899

2

ci sono un paio di possibili approcci a questo, ma vorrei fare una delle seguenti:

È possibile utilizzare mod_rewrite, come suggerito da @LazyOne, per reindirizzare solo i file con estensione .php al documento personalizzato:

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

oppure si può dirigere tutto attraverso il gestore degli errori di PHP come già fate, e utilizzare PHP per determinare se la risorsa richiesta è uno script PHP o no:

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

Lo svantaggio di questo secondo approccio è che potrebbe essere necessario riscrivere il documento di errore standard in modo che utilizzasse PHP per ottenere informazioni dinamiche da visualizzare all'utente, tali e il percorso della risorsa richiesto.

1

Utilizzando la $_SERVER['REQUEST_URI'], è possibile controllare facilmente la fine del file che ha provocato un errore e poi gettare un colpo di testa ad un normale 404 se non corrisponde alle proprie esigenze o semplicemente un esempio di rendering diversa 404

mettere questo nel file 404.php

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

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

invio 301 invece di 404 sembra piuttosto strano –

Problemi correlati