2011-09-25 21 views
6

में% 2F से मेल नहीं कर सकते हैं मैं (एक .htaccess में) फिर से लिखने के नियमों का एक सेट है कुछ इस तरह:mod_rewrite

RewriteRule ^list/vendor/(.*)$ list.php?vendor=$1 
RewriteRule ^list/product/(.*)$ list.php?product=$1 
RewriteRule ^list/(.*)$ list.php?search=$1 

(मुझे नहीं लगता कि पहले दो मेरे सवाल के लिए प्रासंगिक हैं, हालांकि) । list.php foo,bar और $_GET['search'] में foo/bar साथ कहा जाता है:

जब मैं myserver.com/list/foo%2Cbar या यहाँ तक कि myserver.com/list/foo/bar में टाइप करें, मैं परिणाम मैं उम्मीद मिलता है।

लेकिन अगर मैं myserver.com/list/foo%2Fbar में टाइप करता हूं, तो ऐसा लगता है कि नियम मेल नहीं खाता है! मुझे इसके बजाय 404 त्रुटि मिलती है। यहाँ क्या हो सकता है? अपाचे 2.2.14, अगर यह मायने रखता है।

(मैंने फ़ायरफ़ॉक्स और क्रोम में एक ही परिणाम की कोशिश की - लेकिन यह निश्चित रूप से ब्राउजर अभिनय हो सकता है)।

+0

क्या यह हो सकता है कि अपाचे इस मामले में मेरी .htaccess फ़ाइल में भी न देखे? यह एक बग होगा, मुझे लगता है ... – LHMathies

+0

त्रुटि लॉग में (जानकारी स्तर पर): 'यूआरआई में% 2f (एन्कोडेड '/') मिला ... 404' – cweiske

उत्तर

14

बह, मैंने पाया ... अपाचे विकल्प AllowEncodedSlashes, जो प्रति निर्देशिका या .htaccess से सेट नहीं किया जा सकता है, और जो डिफ़ॉल्ट रूप से बंद है।

बिल्ड-ए-वर्कअराउंड टाइम, अगर मैं होस्टिंग लोगों को अपने वर्चुअल सर्वर में चालू नहीं कर पा रहा हूं।

+0

लौट रहा है जब आप नहीं चाहते हैं या यह बदलना असंभव है यूआरएल बनाने से पहले सर्वर कॉन्फ़िगरेशन आप सभी '/' अक्षरों को '-' से बदल सकते हैं। इसे '% xx' वर्ण के रूप में एन्कोड नहीं किया जाएगा। जब आपको मूल स्ट्रिंग की आवश्यकता होती है तो बस '/' को'/'से प्रतिस्थापित करें। – LEDfan

+0

मैंने एक mod_rewrite यूआरएल में पैरामीटर के रूप में यूआरएल पास करने की कोशिश कर रहे एक ही समस्या में भाग लिया है। मेरा समाधान यूआरएल कोड को यूआरएलएनकोड करना था जिसे मैं पास करने की कोशिश कर रहा हूं, फिर प्राप्त करने वाले अंत में मैं इसे डीकोड करता हूं। मैं जावास्क्रिप्ट और PHP का उपयोग जावास्क्रिप्ट के अंत में कर रहा हूं, मैं 'encodeURIComponent (encodeURIComponent (urlToBePassed)) का उपयोग करता हूं, ताकि पैरामीटर के रूप में वास्तव में पारित किया जा सके 'http://example.com/url/http%253A%252F% 252Ftheurl.being.passed.com% 252FsomeDir% 252FsomeImage.png'। थोड़ा उलझन में काम करता है लेकिन काम करता है। –