2010-10-25 29 views
18

Tôi không biết điều này có khả thi hay không, tôi có một máy chủ lưu trữ hình ảnh mà tôi đã tự tạo. Tôi cần một số chỉnh sửa cuối cùng với nó.Thay thế url hình ảnh không hợp lệ bằng hình ảnh 404

Bất cứ khi nào một hình ảnh đã bị xóa hoặc là một url hình ảnh không hợp lệ, cần thay thế với một hình ảnh 404, vì vậy ví dụ nếu ai đó thêm này:

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

Nhưng nó là một không hợp lệ liên kết, vì vậy tôi cần nó để hiển thị:

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

Đó là như thế này:

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

Tôi biết rằng .htaccess có thể làm điều này với nó ErrorDocument 404, nhưng tôi có một cái nào khi một người dùng truy cập đến một trang không hợp lệ, vì vậy nó sẽ hiển thị trang 404 .

Vì vậy, bất cứ khi nào người dùng liên kết hình ảnh và ảnh không hợp lệ hoặc bị xóa, tôi cần nó được thay thế bằng hình ảnh 404.

Tôi làm cách nào để thực hiện việc này?

+0

Bạn 'có thể thử thay đổi .htaccess' của bạn để ném một' 404 page' cho mọi tập tin mất mát ** ** trừ hình ảnh các tệp, thay vào đó sẽ nhận được hình ảnh '404 của bạn '. – drudge

Trả lời

38

Dưới đây là một câu trả lời tiềm năng:

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

khác là sử dụng một trang tùy chỉnh kịch bản:

Sử dụng ErrorDocument chỉ (ghi nhận tại [httpd.apache.org]) để điểm lỗi '404' đối với tập lệnh (perl, PHP, bất kỳ điều gì). Nếu tệp được yêu cầu có phần mở rộng hình ảnh (hoặc có một hình ảnh /* mimetype; PHP cung cấp chức năng mime_content_type [us2.php.net] cho điều này; tôi chắc chắn có nhiều cách để thực hiện việc này trong perl ; MIME :: Các loại [search.cpan.org] module là một chiều), sau đó đặt tiêu đề "Loại nội dung" thành mimetype hình ảnh biểu trưng của bạn và trả lại nội dung của logoimage đến trình duyệt.

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

+0

Người đầu tiên làm việc, chỉ cần tinh chỉnh nó như đã nói từ liên kết đó, vì vậy nó hoạt động hoàn hảo. Cảm ơn. – MacMac

+0

Chỉ trong trường hợp liên kết thay đổi hoặc không khả dụng, có vẻ như điều này đã được thực hiện trong câu trả lời: "Lưu ý: cần phải có dấu cách trước '!' Và tất cả ký tự '¦' cần phải là đường ống chắc chắn, không bị hỏng " – jsims281

+1

Chắc chắn là tốt nhất để gửi cho một tập lệnh thay vì một hình ảnh, bởi vì chỉ cần gửi nó vào hình ảnh theo cách này không gửi tiêu đề' 404'. Nếu bạn gửi nó vào một kịch bản lệnh, kịch bản lệnh có thể xuất ra cả tiêu đề '404' và chính hình ảnh đó, cho bạn cái tốt nhất của cả hai thế giới. – brentonstrine

16

Với Apache, bạn có thể có multiple .htaccess files. Vì vậy, nếu tất cả các hình ảnh của bạn được lưu trữ trong cùng một thư mục, tạo ra một tập tin .htaccess bên trong thư mục đó và add

ErrorDocument 404 /img/notfound.jpg 

này sẽ tạo ra một tùy chỉnh 404 chuyển hướng mà chỉ được áp dụng cho thư mục hình ảnh của bạn, cộng với các thư mục con của nó .

+0

Điều này sẽ làm việc, không nghĩ về điều này. Đã chấp nhận câu trả lời trước của bạn. Xin lỗi bạn hiền. – MacMac

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

Giải pháp tốt. Thật đơn giản, giữ lại tiêu đề 404 và không yêu cầu phải có tất cả hình ảnh của bạn trong một thư mục. – aNoble

+0

Nó hoạt động! Thực ra tôi không biết bạn có nên đặt "" gần 404: [ở đây] (http://httpd.apache.org/docs/2.4/custom-error.html) apache nói: hành động sẽ được xử lý là: * URL cục bộ để chuyển hướng đến (nếu hành động bắt đầu bằng "/"). * URL bên ngoài để chuyển hướng đến (nếu hành động là URL hợp lệ). * Văn bản sẽ được hiển thị (nếu không có nội dung nào ở trên). Văn bản phải được bao trong dấu ngoặc kép (") nếu nó chứa nhiều hơn một từ. –

1

Theo và ngoài câu trả lời của AdamH, bạn nên xuất 404 header.Đây là những gì tôi đang sử dụng,

.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

Bạn có thể sử dụng ErrorDocument với chỉ thị FilesMatch

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

chí này show /image.jpg nếu hình ảnh 404 uri có jpgpng hoặc gif yêu cầu gia hạn.

quý vị cũng có thể thêm hình ảnh tùy chỉnh của bạn hoặc đánh dấu html vào ErrorDocument:

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

Đây là giải pháp đúng, không có dấu ngoặc kép. – andreszs

Các vấn đề liên quan