2010-10-25 30 views
18

No sé si esto es posible o no, tengo un host de imagen que he hecho yo mismo. Necesito algunos retoques con él.Reemplazar url de imagen no válida con 404 imagen

Cada vez que una imagen ha sido borrada o sea una URL de la imagen no es válida, se debe sustituir con una imagen 404, así que por ejemplo si alguien añade esto:

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

Pero es un inválido enlace, por lo que necesito que se muestre:

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

¿Cuál es la siguiente:

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

sí sé que .htaccess puede hacer esto con su ErrorDocument 404, pero tengo uno ya cuando un usuario acceso a una página no válida, por lo que sería una muestra de la página 404 .

De modo que cada vez que un usuario conecta una imagen y no es válida o se elimina, necesito que se sustituya por la imagen 404.

¿Cómo puedo hacer esto?

+0

Usted podría intentar modificar su '.htaccess' para lanzar un' 404 page' para todos los archivos que faltan ** ** excepto imagen archivos, que obtendría su '404 imagen' en su lugar. – drudge

Respuesta

38

He aquí una posible respuesta:

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

Otra es utilizar una página de guión personalizado:

Uso de la directiva ErrorDocument (documentado en [httpd.apache.org]) para punto un error '404' a un script (perl, PHP, lo que sea). Si el archivo solicitado tiene una extensión de imagen (o tiene una imagen /MIME *; PHP suministra la mime_content_type [us2.php.net] función de esto, yo estoy seguro de que hay muchas maneras de hacer esto en Perl ; el MIME :: Tipos [search.cpan.org] módulo es una forma), a continuación, establecer el "Content-Type" de cabecera para el tipo MIME la imagen del logotipo de y devolver el contenido de la LOGOIMAGE a la navegador.

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

+0

El primero funcionó, simplemente lo pellizcó como se dice desde ese enlace, por lo que funciona perfectamente. Gracias. – MacMac

+0

En caso de que el enlace cambie o deje de estar disponible, parece que ya se ha hecho en la respuesta: "Nota: debe haber un espacio antes del '!', Y todos los caracteres '|' deben ser sólidos, no rotos " – jsims281

+1

Definitivamente es mejor enviar a un script en lugar de a una imagen, porque el simple hecho de enviarlo a la imagen de esta manera no envía un encabezado' 404'. Si lo envía a una secuencia de comandos, la secuencia de comandos puede generar tanto el encabezado '404' como la imagen misma, lo que le ofrece lo mejor de ambos mundos. – brentonstrine

16

Con Apache, puede tener multiple .htaccess files. Por lo tanto, si todos sus imágenes se almacenan en el mismo directorio, crear un archivo .htaccess dentro de ese directorio y añadir

ErrorDocument 404 /img/notfound.jpg 

Esto creará una redirección 404 que se aplica sólo a su directorio de imágenes, además de sus subdirectorios .

+0

Esto funcionaría, no pensé en esto. Aceptó la respuesta antes que la tuya. Lo siento amigo. – MacMac

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

Buena solución. Es simple, conserva el encabezado 404 y no requiere tener todas sus imágenes en una sola carpeta. – aNoble

+0

¡Funciona! En realidad, no sé si debería poner "" cerca de 404: [aquí] (http://httpd.apache.org/docs/2.4/custom-error.html) Apache decir: la acción se tratará como: * Una URL local para redirigir a (si la acción comienza con un "/"). * Una URL externa para redireccionar a (si la acción es una URL válida). * Texto que debe mostrarse (si no aparece ninguno de los anteriores). El texto debe estar entre comillas (") si consta de más de una palabra. –

1

acuerdo y, además de la respuesta de AdamH, que debe ser la salida 404 header.Esto es lo que estoy 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

Se puede utilizar con la directiva ErrorDocument FilesMatch

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

Esta voluntad mostrar /image.jpg si se requiere una imagen 404 uri con jpgpng o gif extensión.

también se puede añadir a la imagen personalizada o el formato HTML para la ErrorDocument:

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

Esta es la solución correcta, sin comillas. – andreszs

Cuestiones relacionadas