2012-11-12 22 views
5

मैं नीचे की तरह की स्थिति के लिए .htaccess नियम बनाने के लिए करना चाहते हैं:क्या मैं .htaccess का उपयोग कर निर्देशिका में नवीनतम फ़ाइल पर रीडायरेक्ट कर सकता हूं?

  • मैं फाइल करने के लिए एक कड़ी है: http://something.com/images/some/image_001.png
  • यह फ़ाइल नहीं मौजूद है है, तो मैं/में नवीनतम फ़ाइल पर रीडायरेक्ट करने छवियों चाहते हैं/कुछ निर्देशिका

.htaccess का उपयोग करके ऐसा कुछ संभव है? मुझे पता है कि मैं जांच सकता हूं कि फ़ाइल रीवाइटकॉन्ड के साथ मौजूद है या नहीं, लेकिन यह नहीं पता कि नवीनतम फ़ाइल पर रीडायरेक्ट करना संभव है या नहीं।

+1

आप नहीं कर सकते एक स्क्रिप्ट (कहें, पीएचपी) जो नवीनतम फाइल पर रीडायरेक्ट करती है और वहां जाने के लिए रिवाइटकंड का उपयोग करती है? – mgarciaisaia

+0

मुझे लगता है कि मैं कर सकता हूं, लेकिन मैं सबसे तेज़ समाधान की तलाश कर रहा हूं और PHP स्क्रिप्ट बनाने का मतलब दूसरे पुनर्निर्देशन को पेश करना है। मैं प्रत्येक निर्देशिका में नवीनतम फ़ाइल में सिम्लिंक के साथ समाधान के बारे में सोच रहा हूं –

उत्तर

1

एक CGI स्क्रिप्ट के लिए नए सिरे से लिखना एक .htaccess से अपने ही एकमात्र विकल्प, तकनीकी रूप से आप एक httpd.conf फ़ाइल में एक फिर से लिखना के साथ एक programatic 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