用 404 图像替换无效的图像 url

Posted

技术标签:

【中文标题】用 404 图像替换无效的图像 url【英文标题】:Replace invalid image url with 404 image 【发布时间】:2011-04-30 08:51:45 【问题描述】:

我不知道这是否可能,我有一个我自己制作的图像主机。我需要对它进行一些最后的调整。

当一张图片被删除或者是一个无效的图片 url 时,它应该替换为 404 图片,例如如果有人添加了这个:

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

但这是一个无效的链接,所以我需要它显示:

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

是这样的:

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

我知道.htaccess 可以用它的ErrorDocument 404 做到这一点,但是当用户访问无效页面时我已经有一个,所以它会显示 404 页面。

因此,每当用户热链接图像并且该图像无效或被删除时,我都需要将其替换为 404 图像。

我该怎么做?

【问题讨论】:

您可以尝试修改您的.htaccess,为所有丢失的文件除了图像文件抛出404 page,这将获得您的404 image 【参考方案1】:

这是一个可能的答案:

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

另一种是使用自定义脚本页面:

使用 errorDocument 指令 (记录在 [httpd.apache.org])到 将“404”错误指向脚本(perl, php,无论如何)。如果请求的文件 具有图像扩展名(或具有 图像/* 模仿类型; PHP 提供 mime_content_type [us2.php.net] 为此的功能;我确定有 在 perl 中有很多方法可以做到这一点;这 MIME::Types [search.cpan.org] 模块 是一种方式),然后设置 mimetype 的“Content-Type”标头 您的徽标图像并返回 logoimage 的内容到 浏览器。

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

【讨论】:

第一个有效,只是按照该链接中的说明对其进行了调整,因此可以完美运行。谢谢。 以防万一链接更改或变得不可用,看起来这已经在答案中完成了:“注意:'!'之前需要有一个空格,并且所有'¦'角色必须是实心管道,而不是破碎的管道” 绝对最好发送到脚本而不是图像,因为以这种方式将其发送到图像不会发送404 标头。如果将其发送到脚本,则脚本可以同时输出 404 标头和图像本身,为您提供两全其美的效果。 喜欢 'jpe?g' 解决方案! :) 此解决方案不保留 404 状态码。【参考方案2】:
<FilesMatch ".(jpg|png|gif)$">
ErrorDocument 404 "/path/to/image.jpg"
</FilesMatch>

【讨论】:

不错的解决方案。它很简单,保留了 404 标头,并且不需要将您的图像全部放在一个文件夹中。 有效!实际上我不知道您是否应该将“”放在 404 附近:here apache 说:该操作将被视为: * 要重定向到的本地 URL(如果该操作以“/”开头)。 * 要重定向到的外部 URL(如果操作是有效 URL)。 * 要显示的文本(如果以上都不是)。如果文本包含多个单词,则文本必须用引号 (") 括起来。 这是最好的,非常优雅的解决方案!【参考方案3】:

使用 Apache,您可以拥有 multiple .htaccess files。因此,如果您的所有图像都存储在同一个目录中,请在该目录中创建一个 .htaccess 文件并添加

ErrorDocument 404 /img/notfound.jpg

这将创建一个仅应用于您的图像目录及其子目录的自定义 404 重定向。

【讨论】:

这个可以,没想到这个。接受了你之前的答案。对不起,伙计。【参考方案4】:

您可以将 ErrorDocument 与 FilesMatch 指令一起使用

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

如果带有 jpg pnggif 扩展名的 404 图像 uri 是,这将显示 /image.jpg请求。

您还可以将自定义图像或 html 标记添加到错误文档:

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

【讨论】:

【参考方案5】:

根据 AdamH 的回答,您应该输出 404 header。这是我正在使用的,

.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);
?>

【讨论】:

以上是关于用 404 图像替换无效的图像 url的主要内容,如果未能解决你的问题,请参考以下文章

Woocommerce“删除产品”删除 X 并替换为图像

如何在 wordpress 视觉作曲家中搜索替换图像 url

我想在实时数据库中保存多个图像 url,但每次旧图像 url 都在颤振中替换为新图像 url

如何从第三方应用程序替换评论部分中的图像

sed:具有反向前瞻匹配的嵌套组

如何覆盖标准后备图像[重复]