2012-12-11 32 views
6

साथ URL से वर्ण निकालें उम्मीद है कि किसी को देख सकते हैं मैं गलत क्या कर रहा है, लेकिन यहां कहानी है ...इनको

मेरे वर्तमान साइट यूआरएल के उत्पाद और श्रेणी के नाम से ई-कॉमर्स सॉफ्टवेयर द्वारा स्वत: जनरेट कर रहे हैं, इसलिए यदि उत्पाद/श्रेणी के नाम में एक गैर-अल्फान्यूमेरिक characer शामिल है, तो यह एक यूआरएल में एन्कोड किया गया है जो दर्द है। ईजी:

mysite.com/Shop/Furniture-Set-Large-Table%2C-4-Chairs.html 

मैं एक नया ई-कॉमर्स समाधान है, जो भी उत्पाद नाम से यूआरएल autogenerates में जाने रहा हूँ, लेकिन पर्याप्त चतुर सभी गैर अक्षरांकीय अक्षर दूर करने के लिए है। यह लोअरकेस में भी परिवर्तित हो जाता है, जिसे मैंने अपरकेस को लोअरकेस पर रीडायरेक्ट करने के लिए एचटीएसीएएस समाधान ढूंढने में कामयाब रहा है। इसमें यूआरएल का 'शॉप' हिस्सा भी नहीं है, जिसे मैंने एचटीएसीएएस के माध्यम से हल करने में भी कामयाब रहा है। ईजी:

mysite.com/furniture-set-large-table-4-chairs.html 

'दुकान' भाग निकालने के लिए:

RedirectMatch 301 ^/Shop/(.*)$ http://www.mysite.com/$1 

एक 404 त्रुटि को रोकने के लिए लोअरकेस साथ अपरकेस प्रतिस्थापित करने के लिए:

RewriteCond %{REQUEST_URI} [A-Z] 
RewriteCond %{REQUEST_FILENAME} !\.(?:png|gif|ico|swf|jpg|jpeg|js|css|php|pdf)$ 
RewriteRule (.*) ${lc:http://www.mysite.com/$1} [R=301,L] 

ये दोनों पूरी तरह से काम करते हैं।

तो मुझे URL से इन एन्कोड किए गए वर्णों को निकालने के लिए एक htaccess नियम, या संभवतः कई की आवश्यकता है। मुझे उन्हें बदलने की जरूरत नहीं है, बस उन्हें हटा दें, क्योंकि सॉफ़्टवेयर यूआरएल को "टेबल% 2 सी -4-चेयर" के रूप में बनाता है - इसलिए केवल% 2C को हटा दिया जाना चाहिए।

मैं इस तरह के रूप URL से कुछ वर्ण एन्कोडिंग, हटाने की जरूरत:

अल्पविराम (% 2C), apostrophe (% 27), पेट के (% 3 ए), आदि

किसी को भी एक सलाह देने के कर सकते हैं इसके लिए उपयुक्त htaccess नियम या नियम?

अग्रिम धन्यवाद।

उत्तर

4

यूआरआई, इससे पहले कि यह रीराइट इंजन के माध्यम से भेज दिया जाता है यूआरएल-डीकोड है ताकि आप वास्तविक पात्रों और नहीं उनके एन्कोडेड समकक्षों से मिलान करना चाहते:

RewriteRule ^(.*),(.*)$ /$1$2 [L] 
RewriteRule ^(.*):(.*)$ /$1$2 [L] 
RewriteRule ^(.*)\'(.*)$ /$1$2 [L] 
RewriteRule ^(.*)\"(.*)$ /$1$2 [L] 
# etc... 

RewriteCond %{ENV:REDIRECT_STATUS} 200 
RewriteRule ^(.*)$ http://www.mysite.com/$1 [L,R=301] 

रीडायरेक्ट स्थिति की सुविधा देता है आधुनिक पुनर्लेखन पता है कि अगर के किसी भी उपर्युक्त नियम लागू किए गए हैं (इस प्रकार आंतरिक रीडायरेक्ट स्थिति मान = 200 बनाते हैं) तो हमें रीडायरेक्ट करने की आवश्यकता है, लेकिन हम नियमों के उस हिस्से तक नहीं पहुंच जाएंगे जब तक कि यह सभी विशेष चरित्र जांच को मंजूरी न दे।

आप इन नियमों को से पहले किसी भी रीडायरेक्ट से पहले चाहते हैं ताकि नियम किसी भी वर्ण के कई उदाहरणों को लूप और हटा सकें। फिर, एक बार कोई और विशेष पात्र नहीं होने के बाद, रीडाइट इंजन आपके रीडायरेक्ट कहां से नीचे जा सकता है।

मैं सुझाव दूंगा कि आप mod_alias RedirectMatch निर्देश हटा दें और इसे एक पुनर्लेखन नियम के साथ प्रतिस्थापित करें। कभी-कभी 2 मॉड्यूल को संयोजित करते हैं और उनमें से दोनों एक एकल यूआरआई को प्रभावित करते हैं, जिससे अप्रत्याशित परिणाम हो सकते हैं। इसलिए उपरोक्त नियमों के सभी से पहले, आप होगा:

RewriteRule ^Shop/(.*)$ /$1 [L] 

विशेष वर्ण की श्रृंखला में /Shop/ को हटाने जोड़ने।फिर आपका अंतिम नियम पालन करेगा:

RewriteCond %{REQUEST_URI} [A-Z] 
RewriteCond %{REQUEST_FILENAME} !\.(?:png|gif|ico|swf|jpg|jpeg|js|css|php|pdf)$ 
RewriteRule (.*) ${lc:http://www.mysite.com/$1} [R=301,L] 
+0

मेरी मूल पोस्ट देखें, मैंने इसे अपनी .htaccess फ़ाइल में जो दिखाया है उसे दिखाने के लिए संपादित किया है। अब कुछ - हालांकि सभी नहीं - यूआरएल नए सॉफ़्टवेयर में mysite.com/parent-category/sub-category/baby-category/ से mysite.com/../sub-category/baby-category/ पर कुछ है। यदि मैं नई एचटीएसीएएस फ़ाइल को मूल संस्करण में वापस लाता हूं, तो ऐसा नहीं होता है, इसलिए यह निश्चित रूप से कुछ ऐसा होना चाहिए जो इस htaccess नियम सेट का कारण बन रहा है। कोई विचार क्यों? –

+0

हैलो.मैं इसे खत्म करना पसंद करूंगा http://www.------.com/final-cut-pro/no-quartz-extreme0-vram/" virtualsets