用 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 png 或 gif 扩展名的 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的主要内容,如果未能解决你的问题,请参考以下文章
如何在 wordpress 视觉作曲家中搜索替换图像 url