我可以使用.htaccess重定向到目录中的最新文件吗?

时间:2012-11-12 15:33:26

标签: apache .htaccess redirect

我想为下面的情况创建.htaccess规则:

使用.htaccess可以这样吗?我知道我可以检查RewriteCond是否存在文件,但不知道是否可以重定向到最新文件。

1 个答案:

答案 0 :(得分:1)

重写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: Get the Latest File Addition in a Directory

中的答案