微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

.htaccess - 检查 .jpg 大小并在匹配时替换

如何解决.htaccess - 检查 .jpg 大小并在匹配时替换

我需要控制所有遥控器 .jpg 匹配大小:4456 和 4824。如果匹配这些字节,我需要用认图像替换。下面的代码是替换一个 .jpg 如果不存在。

RewriteCond %{REQUEST_URI} \.(jpeg|JPEG|jpg|JPG)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .*$ /default-image.jpg [L]

如果 example.com/*.jpg 的大小为 (4456 | 4824),我需要将其替换为 default-image.jpg

PHP 中,这很适合我的需求,但我更愿意在 .htaccess 中设置。

$link = 'https://example.com/test.jpg';
$check_image = get_headers($link,1);
$bytes = $check_image["Content-Length"];    
if ($bytes < 5000) { ...

解决方法

您可以在 Apache 2.4 上使用带有 mod_rewrite 的 Apache 表达式执行以下操作:

RewriteCond %{REQUEST_URI} !^/default-image\.jpg$
RewriteCond expr "filesize(%{REQUEST_FILENAME}) =~ /4456|4824/"
RewriteRule \.jpe?g$ /default-image.jpg [NC,L]

如果请求的图像不存在,则 filesize() 函数仅返回 0(无错误)。因此,为了处理不存在的图像,您可以更改正则表达式以包含 0,即。 /0|4456|4824/


旁白:

RewriteCond %{REQUEST_URI} \.(jpeg|JPEG|jpg|JPG)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .*$ /default-image.jpg [L]

在第一个条件下,不需要检查 jpeg|JPEG,因为您在指令上使用了 NC(不区分大小写)标志。但是,最好在 RewriteRule pattern 中执行此检查,而不是创建额外的 条件

无需检查请求是否映射到目录(第三个条件),除非您还有以 .jpg 等结尾的目录名称(不太可能)。文件系统检查相对昂贵,因此最好尽可能避免它们。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。