我想为以下情况创建 .htaccess 规则:
- 我有一个文件链接:http ://something.com/images/some/image_001.png
- 如果此文件不存在,我想重定向到 /images/some 目录中的最新文件
使用 .htaccess 可以实现这样的事情吗?我知道我可以使用 RewriteCond 检查文件是否存在,但不知道是否可以重定向到最新文件。
我想为以下情况创建 .htaccess 规则:
使用 .htaccess 可以实现这样的事情吗?我知道我可以使用 RewriteCond 检查文件是否存在,但不知道是否可以重定向到最新文件。
重写 CGI 脚本是 .htaccess 的唯一选择,从技术上讲,您可以在httpd.conf文件中使用带有 RewriteRule的程序化 RewriteMap 。
该脚本可以直接为文件提供服务,因此通过内部重写,逻辑可以完全在服务器端,例如
.htaccess 规则
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^images/(.*)$ /getLatest.php [L]
其中getLatest.php类似于:
<?php
$dir = "/srv/www/images";
$pattern = '/\.(jpg|jpeg|png|gif)$/';
$newstamp = 0;
$newname = "";
if ($handle = opendir($dir)) {
while (false !== ($fname = readdir($handle))) {
// Eliminate current directory, parent directory
if (preg_match('/^\.{1,2}$/',$fname)) continue;
// Eliminate all but the permitted file types
if (! preg_match($pattern,$fname)) continue;
$timedat = filemtime("$dir/$fname");
if ($timedat > $newstamp) {
$newstamp = $timedat;
$newname = $fname;
}
}
}
closedir ($handle);
$filepath="$dir/$newname";
$etag = md5_file($filepath);
header("Content-type: image/jpeg");
header('Content-Length: ' . filesize($filepath));
header("Accept-Ranges: bytes");
header("Last-Modified: ".gmdate("D, d M Y H:i:s", $newstamp)." GMT");
header("Etag: $etag");
readfile($filepath);
?>
注意:代码部分从以下答案中借用:PHP:获取目录中的最新文件添加