2012-11-12 5 views
5

Chcę utworzyć .htaccess regułę sytuacji jak poniżej:Czy mogę przekierować do najnowszego pliku w katalogu za pomocą .htaccess?

Czy jest coś takiego przy użyciu .htaccess? Wiem, że mogę sprawdzić, czy plik istnieje z RewriteCond, ale nie wiem, czy możliwe jest przekierowanie do najnowszego pliku.

+1

Nie można dokonać skrypt (powiedzmy, PHP), który przekierowuje do najnowszego pliku i używa RewriteCond, aby tam pojechać? – mgarciaisaia

+0

Przypuszczam, że mogę, ale szukam najszybszego możliwego rozwiązania, a tworzenie skryptów php oznacza wprowadzenie drugiej redirakcji. Zastanawiam się nad rozwiązaniem z dowiązaniami symbolicznymi do najnowszego pliku w każdym katalogu –

Odpowiedz

1

Przepisanie do skryptu CGI jest to jedyna opcja z .htaccess, technicznie można użyć Zautomatyzowane RewriteMap z RewriteRule w httpd.conf pliku.

Skrypt może obsługiwać plik bezpośrednio, więc przy wewnętrznym przepisywaniu logika może być w całości po stronie serwera, np.

.htaccess reguła

RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-s 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^images/(.*)$ /getLatest.php [L] 

Gdzie getLatest.php jest coś takiego:

<?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); 
?> 

Uwaga: Kod częściowo zapożyczony z odpowiedziami w: PHP: Get the Latest File Addition in a Directory

Powiązane problemy