2012-11-12 30 views
5

Voglio creare una regola per .htaccess situazione come di seguito:Posso reindirizzare al file più recente nella directory usando .htaccess?

È qualcosa del genere possibile utilizzando .htaccess? So che posso verificare se il file esiste con RewriteCond, ma non so se è possibile reindirizzare al file più recente.

+1

non puoi fare uno script (per esempio, PHP) che reindirizza al file più recente e usa RewriteCond per andare lì? – mgarciaisaia

+0

Suppongo di sì, ma sto cercando la soluzione più rapida possibile e creare script php significa introdurre la seconda rediraction. Sto pensando a una soluzione con collegamenti simbolici al file più recente in ogni directory –

risposta

1

riscrittura ad uno script CGI è l'unica opzione da un .htaccess, tecnicamente è possibile utilizzare un programmatico RewriteMap con una RewriteRule in un file dihttpd.conf.

Lo script può servire direttamente il file, quindi con una riscrittura interna la logica può essere interamente lato server, ad es.

Regola .htaccess

RewriteEngine On 
RewriteBase/

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

Dove getLatest.php è qualcosa di simile:

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

Note: Codice parzialmente preso in prestito dalle risposte in: PHP: Get the Latest File Addition in a Directory

Problemi correlati