检查.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上使用Apache表达式mod_rewrite执行以下操作:

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模式中执行此检查比创建额外的条件更为理想。

不需要检查请求是否映射到目录(第三个条件),除非您也有以.jpg等结尾的目录名(不太可能)。文件系统检查是比较昂贵的,所以最好尽可能避免。

最新更新