2009-01-22 6 views
14

मौजूद है कैसे आप अगर संचय फ़ाइल मौजूद है की जाँच करने के ModRewrite उपयोग कर सकते हैं, और अगर यह होता है, कैश फ़ाइल को फिर से लिखने और नहीं तो एक गतिशील फाइल करने के लिए लिखा।RewriteRule rewriten फ़ाइल पथ में फ़ाइल की जांच

उदाहरण के लिए मैं निम्नलिखित फ़ोल्डर संरचना है अगर कैश फ़ाइल पुनर्लेखन मौजूद

 
example.com/pages/1 

और:

 
pages.php 
cache/ 
    pages/ 
    1.html 
    2.html 
    textToo.html 
    etc. 

कैसे आप सेटअप यह इतना अनुरोध के लिए RewriteRules इस तरह भेजने जा सकती हैं कैश फ़ाइल को पूरा करें, और यदि कैश फ़ाइल मौजूद नहीं है, तो पृष्ठों को फिर से लिखें। php? p = 1

यह ऐसा कुछ होना चाहिए: (ध्यान दें कि यह काम नहीं करता है, अन्यथा मैं इस के लिए कहा नहीं हो)

 
RewriteRule ^pages/([^/\.]+) cache/pages/$1.html [NC,QSA] 
RewriteCond %{REQUEST_FILENAME} -f [NC,OR] 
RewriteCond %{REQUEST_FILENAME} -d [NC] 
RewriteRule cache/pages/([^/\.]+).html pages.php?p=$1 [NC,QSA,L] 

मैं बंद मोटे इस PHP का उपयोग कर सकते हैं, लेकिन मैंने सोचा कि यह mod_rewrite का उपयोग संभव होना ही था।

उत्तर

17
RewriteRule ^pages/([^/\.]+) cache/pages/$1.html [NC,QSA] 

# At this point, we would have already re-written pages/4 to cache/pages/4.html 
RewriteCond %{REQUEST_FILENAME} !-f 

# If the above RewriteCond succeeded, we don't have a cache, so rewrite to 
# the pages.php URI, otherwise we fall off the end and go with the 
# cache/pages/4.html 
RewriteRule ^cache/pages/([^/\.]+).html pages.php?p=$1 [NC,QSA,L] 

मल्टीव्यू को बंद करना महत्वपूर्ण है (यदि आपने उन्हें सक्षम किया है) भी है।

Options -MultiViews 

अन्यथा प्रारंभिक अनुरोध (/ पृष्ठों/...) स्वचालित रूप से mod_rewrite किक से पहले /pages.php करने के लिए परिवर्तित कर दिया जाएगा। तुम भी बस कुछ और करने के लिए pages.php नाम बदल सकते हैं (और पिछले पुनर्लेखन अद्यतन मल्टीव्यूज़ संघर्ष से बचने के लिए भी नियम)।

संपादित करें: मैं शुरू में RewriteCond ... !-d शामिल है, लेकिन यह बाहरी है।

5

एक और दृष्टिकोण पहले देखने के लिए हो सकता है अगर वहाँ एक chached प्रतिनिधित्व उपलब्ध है:

RewriteCond %{DOCUMENT_ROOT}/cache/$0 -f 
RewriteRule ^pages/[^/\.]+$ cache/$0.html [L,QSA] 

RewriteRule ^pages/([^/\.]+)$ pages.php?p=$1 [L,QSA] 
संबंधित मुद्दे