2012-04-26 22 views
5

अरे वहाँ!htaccess - सशर्त पुनर्लेखन और समाप्त हो गया

मेरे पास Apache 2.x सर्वर वेबूट में एक फ़ोल्डर /static है।

  • यूआरएल /static/bg.jpg (टाइमस्टैम्प से छुटकारा) को फिर से लिखा किया जाएगा
  • यह हो जाएंगे: एक अनुरोध

    /static/<somename like [\S-_]+>.(png|jpg|css|js)/\d{8,15} 
    
    उदाहरण

    /static/bg.jpg/1335455634 
    

    के लिए

    से मेल खाता है मैं दो बातें चाहते हैं never-expire ('2030 की समाप्ति, अधिकतम आयु = 2 9 0304000, सार्वजनिक कैश, ...)

यदि अनुरोध मेल नहीं खाता है, तो अनुरोध और उसके शीर्षलेख सामान्य होना चाहिए, कोई पुनर्लेखन नहीं होना चाहिए। आदर्श रूप में, बाहर/स्थिर/* के बाहर कोई भी अनुरोध प्रभावित नहीं होना चाहिए (हालांकि «संयोगात्मक पिछला समय सारिणी» दुर्लभ होना चाहिए ...)

मेरे पास FilesMatch/RewriteCond के साथ कुछ भी परेशानी नहीं है, इसलिए मैं अपने खराब प्रयासों को पोस्ट नहीं करता हूं। .. (जीनियल में रीवाइट मेरी मशीन पर सक्षम है, और मेरे पास कैश से संबंधित हेडर भेजने का अधिकार है)

डैंकसेचॉन!

उत्तर

2

इस तरह कुछ कैसे?

RewriteEngine on 
RewriteRule ^static/([^/]+\.(png|jpg|css|js))x?/\d{8,15}$ /static/$1 [NC,L] 

<FilesMatch "\.(png|jpg|css|js)$"> 
    <IfModule mod_expires.c> 
     ExpiresActive On 
    </IfModule> 
    <IfModule mod_headers.c> 
     ExpiresDefault "access plus 10 years" 
    </IfModule> 
</FilesMatch> 
+0

धन्यवाद। मैं * देखूँगा और इसका परीक्षण करूंगा। मैं आपके 2-3 दिनों के लिए धैर्य मांगता हूं। –

+0

कोई समस्या नहीं है। मदद करने के लिए खुश। वैसे, यह htaccess नियमों का परीक्षण करने के लिए एक बहुत ही उपयोगी टूल है - http://htaccess.madewithlove.be/ – jesal

+0

धन्यवाद। आपका समाधान, क्रमशः आपके समाधान दोनों काम करते हैं। एक चीज असंभव प्रतीत होती है हालांकि: गैर-लिखित फाइलों को नियमित रूप से समाप्त हो जाती है, और केवल पुनः लिखित फाइलें कभी-कभी समाप्त नहीं होती हैं। FilesMatch केवल अंततः खोले गए फ़ाइल के बारे में परवाह करता है, जो कुछ भी पहले होता है। भले ही पुनर्लेखन नियम के ऊपर या नीचे रखा गया हो। दूसरे शब्दों में, सभी jpgs, pngs अब कभी समाप्त नहीं हो जाते हैं। तो अगर मैं 'static/simple.jpgx/123456789' के लिए भी जाता हूं (यही कारण है कि मैं अस्थायी रूप से' x? 'में फंस गया हूं, तो यह मिलान हो जाता है। –

4
Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

RewriteRule ^static/([^.]+\.(png|jpe?g|css|js))/\d{8,15}$ static/$1 [L,R,NC] 

# now set expire date to today + 1 year 
<IfModule mod_expires.c> 
    ExpiresActive on 
    ExpiresByType image/jpeg "access plus 1 years" 
    ExpiresByType image/png "access plus 1 years" 
    ExpiresByType text/css "access plus 1 years" 
    ExpiresByType text/js "access plus 1 years" 
    ExpiresByType text/javascript "access plus 1 years" 
    ExpiresByType application/javascript "access plus 1 years" 
    ExpiresByType application/x-javascript "access plus 1 years" 
</IfModule> 

मैं के लिए iccess plus 1 years चुना है कभी न समाप्त हो रहा है क्योंकि मैं वेब पर इस पाया:

कभी समाप्त नहीं होता, "एक मूल सर्वर एक भेजता है" के रूप में एक प्रतिक्रिया चिह्नित करने के लिए " प्रतिक्रिया भेजी गई प्रतिक्रिया से लगभग एक वर्ष की तारीख समाप्त हो जाती है। HTTP/1.1 सर्वर भविष्य में एक वर्ष से अधिक समय की समाप्ति तिथियां नहीं भेजना चाहिए। "

HTTP से 1.1 आरएफसी

+0

भी आपको धन्यवाद। ऊपर देखो। –

+0

मेरे लिए अच्छा काम करता है, मुझे आश्चर्य है कि मुझे भी जोड़ना चाहिए। अगर वहां ... – adrianTNT

+0

हाँ आप '.gif' भी जोड़ सकते हैं। – anubhava