2010-07-23 15 views
8

इस पुनर्लेखन नियम के साथ क्या गलत है?रिवाइटरूल जो जीईटी पैरामीटर को सुरक्षित रखता है

RewriteRule ^api/(.+)$ api/index.php?url=$1 [L] 

मैं बस "index.php? Url =" एपीआई के बाद जोड़ा जाना चाहिए और शेष पैरामीटर प्राप्त करने से पहले।

api/image/upload&arg1=1&text=lorem+ipsum 

api/index.php?url=image/upload&arg1=1&text=lorem+ipsum 

को

क्या एपीआई के बाद सब कुछ पाने के लिए के साथ (। +) गलत है /?

+0

^एपीआई/([ए-जेए-जेड 0-9/_ \ & \ = \%] +) $ काम करता है लेकिन अलग-अलग भाषा विशिष्ट पात्रों के साथ काम नहीं करेगा जैसे कि और अन्य ... इसलिए मैं चाहता हूं इसके बजाय काम करने के लिए^api /(.+)$ की तरह। । लाइन ब्रेक या स्ट्रिंग के अंत को छोड़कर किसी भी चरित्र का मतलब होना चाहिए, इसलिए मुझे यह नहीं मिलता कि यह क्यों काम नहीं करता है। – Tirithen

+0

संभावित डुप्लिकेट [एचटीएसीएएस रीराइट के साथ यूआरएल पैरामीटर रखें] (http://stackoverflow.com/questions/4071155/keep-url-parameters-with-htaccess-rewrite) –

उत्तर

19

रिवाइट्रूल पर रेगेक्स केवल यूआरएल के पथ भाग के खिलाफ चलाया जाता है, क्वेरी पैरामीटर नहीं। सौभाग्य से मौजूदा क्वेरी पैरामीटर को संरक्षित करने के लिए [QSA] flag है।

+0

अद्भुत! यह मेरी समस्याओं का हल! मुझे सभी गैर ए-जेए-जेड -9_ यूआरएल एन्कोड करने के लिए एक जेएस फ़ंक्शन भी मिला है। अक्षर http://cass-hacks.com/articles/code/js_url_encode_decode/ – Tirithen

+0

बहुत बहुत धन्यवाद! –

+0

क्यूएसए ने मुझे बचाया! धन्यवाद महोदय! –

0

क्या आप अनंत रिकर्सन को रोकने के लिए कुछ कर रहे हैं?

RewriteRule ^api/(.+)$ api/index.php?url=$1 [R=301,L] 

या कुछ बराबर

+0

मेरे पास पहले [एल] था लेकिन यह कोई भी नहीं बनाता diffrence। मेरी समस्या यह है कि apache2 रिपोर्ट करता है कि केवल पैरामीटर प्राप्त होता है [url] => index.php, अन्य सभी पैरामीटर चले गए हैं और यूआरएल पैरामीटर 'छवि/अपलोड' होना चाहिए। जब मैं नियम^एपीआई/([ए-जेए-जेड -9/9/_] +) $ का उपयोग करता हूं तो यूआरएल पैरामीटर 'छवि/अपलोड' होता है लेकिन मैं इसके बजाय अन्य सभी जीईटी पैरामीटर खो देता हूं। – Tirithen

+0

मैं भी रीडायरेक्ट करने की कोशिश नहीं कर रहा हूं, बस पहले एपीआई/और पहले से पहले टेक्स्ट प्राप्त करें और "index.php? Url =" द्वारा स्ट्रिंग प्रीफ़िक्स्ड प्राप्त करने के लिए और शेष जीईटी पैरामीटर – Tirithen

+0

संरक्षित कैसे करें ' आर = 301' यहाँ काम करते हैं? यह http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html –

0

मुझे लगता है कि आप रेगुलर एक्सप्रेशन से सामान से पहले अपने डोमेन नाम लिखना चाहिए। इस तरह:

RewriteRule ^(.+).com/api/(.*)$ "$1.com/api/index.php?url=$2" [R=301,L] 
संबंधित मुद्दे