2012-09-01 8 views
5

मैं अपनी वेबसाइट से PHP एक्सटेंशन को हटाने का प्रयास कर रहा था। जब उपयोगकर्ता एक PHP फ़ाइल का अनुरोध करता है, तो PHP हटा दिया जाएगा और उपयोगकर्ता को रीडायरेक्ट किया जाएगा, और जब उपयोगकर्ता PHP के बिना यूआरएल में टाइप करेगा, तो वास्तविक PHP फ़ाइल परोसा जाएगा। यूआरएल में जीईटी पैरामीटर होने पर यह अच्छी तरह से काम करता है। मेरे नियमों के रूप में नीचे हैं:जीईटी पैरामीटर को संरक्षित करते समय, PHP विस्तार को हटाने के लिए अपाचे Mod_rewrite का उपयोग कैसे करें?

# remove .php ONLY if requested directly 
RewriteCond %{THE_REQUEST} (\.php\sHTTP/1) 
RewriteRule ^(.+)\.php$ /$1 [R=301,L,QSA] 

# remove trailing slash ONLY if it is not an existing folder 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/$ /$1 [L,R=301] 

# rewrite to FILENAME.php if such file does exist and is not a folder 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ /$1.php [L,QSA] 

मैंने सोचा था कि यह पहले से ही php दूर करने के लिए भी जब वहाँ किसी भी प्राप्त पैरामीटर है सक्षम होना चाहिए, लेकिन यह विफल रहा है। मैंने इस तरह कुछ भी करने की कोशिश की:

RewriteCond %{THE_REQUEST} (\.php\sHTTP/1) 
RewriteRule ^(.)\.php(.)$ $1$2 [R=301,L,QSA] 

यह भी काम नहीं करता है, PHP अभी भी वहां है। लेकिन अगर मैं कोशिश:

RewriteRule ^(.)\.php(.)$ $1$2 [R=301,L,QSA] 

यानी, RewriteCond को हटाने, php विस्तार हटा दिया जाता है और मानकों को संरक्षित किया गया है, लेकिन के रूप में ब्राउज़र का कहना है बहुत अधिक रीडायरेक्ट वहाँ थे पेज पर नहीं दिए जाएंगे।

कोई भी विचार किसी भी विचार कृपया?

उत्तर

0

आप %{QUERY_STRING} पैरामीटर दस्तावेज here का उपयोग करना चाह सकते हैं।

उपयोगी पढ़ने here और here

2

धन्यवाद आपके उत्तर के लिए SteAp। मैं अभी इसके साथ निपटने का एक तरीका समझने में सक्षम हूं, और अगर अन्य समान समस्याओं में भाग लेते हैं तो यहां साझा करना चाहते हैं।

मेरे नियमों में, मैं जब उपयोगकर्ता एक PHP फ़ाइल का अनुरोध करता है बाहरी रीडायरेक्ट पर अमल करने के लिए

# remove .php ONLY if requested directly 
RewriteCond %{THE_REQUEST} (\.php\sHTTP/1) 
RewriteRule ^(.+)\.php$ /$1 [R=301,L,QSA] 

है। रीवाइटकॉन्ड यहां रीडायरेक्ट लूप को रोकने के लिए है - यानी, अनुचित आंतरिक पुनर्लेखन और बाहरी रीडायरेक्ट (PHP को हटाकर, फिर PHP को हटाकर, फिर हटाएं, ...)

पैरामीटर होने पर, वास्तविक हेडर आता है http://domain.com/file.php के रूप में? .... HTTP/1.1 ऐसा कुछ, इसलिए रीवाइटकॉन्ड में पैटर्न काम नहीं करेगा क्योंकि यह पैरामीटर को ध्यान में नहीं लेता है।

इसे हल करने के लिए बस के साथ ऊपर कोड की जगह: ऐसा करके

# remove .php ONLY if requested directly 
RewriteCond %{THE_REQUEST} (\.php(.*)\sHTTP/1) 
RewriteRule ^(.+)\.php$ /$1 [R=301,L,QSA] 

, मानकों पैटर्न से मिलान किया जा सकता है, और अब सब कुछ काम करता है।

आशा इस किसी समान समस्या हो रही मदद मिलेगी

+0

RewriteRule में (या मेरे जैसे सिर्फ एक noob है lol?):/$ 1, टूटे यूआरएल उत्पन्न बाहर के साथ $ 1 का उपयोग / – StefanoCudini

संबंधित मुद्दे

 संबंधित मुद्दे