2010-10-25 14 views
18

Non so se questo sia possibile o meno, ho un host di immagini che ho creato io stesso. Ho bisogno di alcune ultime modifiche con esso.Sostituisci URL immagine non valido con immagine 404

Ogni volta che un'immagine è stato eliminato o è un URL immagine non valido, dovrebbe sostituire con un'immagine 404, così per esempio, se qualcuno aggiunge questo:

http://imagehosturl.com/i/34njk5n.jpg

Ma è un invalido collegamento, quindi ho bisogno di mostrare:

http://imagehosturl.com/img/notfound.jpg

che è come questo:

alt text http://tinypic.com/images/404.gif

so che .htaccess può fare questo con il suo ErrorDocument 404, ma io ho già uno quando un utente l'accesso a una pagina non valida, quindi sarebbe mostrare la pagina 404 .

Quindi, ogni volta che un utente collega a caldo un'immagine e non è valida o viene eliminata, è necessario sostituirla con l'immagine 404.

Come posso fare questo?

+0

Si potrebbe provare a modificare il vostro '.htaccess' di gettare un' 404 page' per tutti i file mancanti ** ** ad eccezione file, che otterrebbero invece l'immagine '404 '. – drudge

risposta

38

Ecco una risposta potenziale:

RewriteEngine on 
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f 
RewriteRule \.(gif|jpe?g|png|bmp) /path/to/logo.gif [NC,L] 

altro è quello di utilizzare una pagina script personalizzato:

Utilizzare la direttiva ErrorDocument (documentato in [httpd.apache.org]) per punto un errore '404' in uno script (perl, PHP, qualunque sia). Se il file richiesto ha un'estensione dell'immagine (o ha un mimetype image/* /mime_content_type [us2.php.net] , sono sicuro che ci sono molti modi per farlo in perl , il MIME :: Tipi [search.cpan.org] modulo è un modo), quindi impostare il "Content-Type" per il tipo MIME della tua immagine logo e restituire il contenuto del logoimage al browser.

http://www.webmasterworld.com/forum92/3458.htm

+0

Il primo ha funzionato, appena modificato come detto da quel collegamento, quindi funziona perfettamente. Grazie. – MacMac

+0

Nel caso in cui il collegamento cambi o diventi non disponibile, sembra che questo sia già stato fatto nella risposta: "Nota: prima di '!' È necessario uno spazio, e tutti i caratteri '|' devono essere solidi, non rotto " – jsims281

+1

Definitivamente meglio inviare a uno script anziché a un'immagine, perché semplicemente inviandolo all'immagine in questo modo non invia un'intestazione' 404'. Se lo mandi a uno script, lo script può mostrare sia l'intestazione '404' che l'immagine stessa, offrendoti il ​​meglio di entrambi i mondi. – brentonstrine

16

Con Apache, si può avere multiple .htaccess files. Quindi, se tutte le immagini sono memorizzati nella stessa directory, creare un file .htaccess all'interno di quella directory e aggiungere

ErrorDocument 404 /img/notfound.jpg 

Questo creerà un 404 redirect personalizzato che viene applicata solo alla directory dell'immagine, più le sue sottodirectory .

+0

Questo funzionerebbe, non ci ho pensato. Ho accettato la risposta prima della tua. Scusa amico. – MacMac

18
<FilesMatch ".(jpg|png|gif)$"> 
ErrorDocument 404 "/path/to/image.jpg" 
</FilesMatch> 
+0

Bella soluzione. È semplice, conserva l'intestazione 404 e non richiede di avere tutte le immagini in un'unica cartella. – aNoble

+0

Funziona! In realtà non so se dovresti mettere "" vicino a 404: [qui] (http://httpd.apache.org/docs/2.4/custom-error.html) apache dire: l'azione sarà trattata come: * Un URL locale da reindirizzare a (se l'azione inizia con un "/"). * Un URL esterno da reindirizzare a (se l'azione è un URL valido). * Testo da visualizzare (se nessuno dei precedenti). Il testo deve essere racchiuso tra virgolette (") se è composto da più di una parola –

1

Secondo e in aggiunta alla risposta di AdamH, si dovrebbe uscita 404 header.Ecco quello che sto usando,

.htaccess

RewriteEngine on 
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f 
RewriteRule \.(gif|jpe?g|png|bmp) /upload/image404.php [NC,L] 

image404.php

<?php 
    $file = 'image404.jpg'; 
    $type = 'image/jpeg'; 
    header("HTTP/1.0 404 Not Found"); 
    header('Content-Type:'.$type); 
    header('Content-Length: ' . filesize($file)); 
    readfile($file); 
?> 
3

È possibile utilizzare ErrorDocument alla direttiva FilesMatch

<filesMatch "\.(jpg|png|gif)$"> 
ErrorDocument 404 /image.jpg 
</filesMatch> 

Questa volontà mostra /image.jpg se un URI un'immagine 404 con jpgpng o GIF viene richiesta estensione.

è anche possibile aggiungere l'immagine personalizzata o HTML markup al ErrorDocument:

immagine
<filesMatch "\.(jpg|png|gif)$"> 
ErrorDocument 404 '<img src="image.jpg">' 
</filesMatch> 
+0

Questa è la soluzione giusta, senza virgolette. – andreszs