【问题标题】:Replace invalid image url with 404 image, with custom size用自定义大小的 404 图像替换无效的图像 url
【发布时间】:2013-08-23 06:24:40
【问题描述】:

如果请求的图像不存在,我想返回默认 (404) 图像。我设置了命名约定,以便我可以提取同一图像的不同大小(由我的应用程序预先生成)。

foo-200.png
foo-50.png
foo-10.png
etc..

破折号 (-) 后面的数字是所请求图像的大小。同样,一旦我上传了一张图片,系统会自动生成不同的尺寸。

但是,如果请求的图像不存在(例如bar-200.png),我想返回与请求大小相同的 404 图像。

bar-200.png     (404)->    notfound-200.png
bar-50.png      (404)->    notfound-50.png
bar-10.png      (404)->    notfound-10.png
etc...

这是我目前在 htaccess 中的内容:

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

但是无论请求什么尺寸,这只会返回一个尺寸为 404 的图像..

有什么帮助吗?

【问题讨论】:

    标签: image .htaccess http-status-code-404


    【解决方案1】:

    通过httpd.conf启用mod_rewrite和.htaccess,然后把这段代码放到你.htaccessDOCUMENT_ROOT目录下:

    Options +FollowSymLinks -MultiViews
    # Turn mod_rewrite on
    RewriteEngine On
    RewriteBase /
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule (?!^notfound-)^[^-]+-([0-9]+)\.(?:gif|jpe?g|png|bmp)$ notfound-$1.png [L,NC,NE]
    

    【讨论】:

    • 完美运行。谢谢!你能帮我分析一下这里发生了什么,这样我就可以了解未来的案例吗?
    • 不客气,很高兴它对你有用。 (?!^notfound-) 实际上是一个负前瞻正则表达式,如果它从 /notfound- 开始,它确保不匹配 URI 的其余部分。然后[^-]+-([0-9]+) 匹配 1 个或多个非连字符,然后是一个连字符,然后是 1 个或多个数字(组 #1)。 Rest 匹配点和有效的图像扩展名。如果匹配成功,则在内部将请求转发到notfound-group1.png
    • 很好的解释。我会投票但没有足够的代表:(谢谢一百万!
    猜你喜欢
    • 2011-04-30
    • 2020-07-15
    • 2016-07-04
    • 1970-01-01
    • 2010-12-28
    • 2019-08-29
    • 1970-01-01
    • 2012-09-11
    • 1970-01-01
    相关资源
    最近更新 更多