5

以下のような状況で.htaccessルールを作成したいと思います。

.htaccessを使用してこのようなことは可能ですか?RewriteCondでファイルが存在するかどうかを確認できることは知っていますが、最新のファイルにリダイレクトできるかどうかはわかりません。

4

1 に答える 1

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: ディレクトリに最新のファイル追加を取得する

于 2012-11-15T20:09:53.113 に答える