2011-11-09 17 views
6

हैलो साथी डेवलपर्स में _escaped_fragment_ के साथ क्रॉल करने योग्य AJAX!htaccess

हम अपने AJAX वेब ऐप के पहले चरण के विकास के साथ लगभग समाप्त हो गए हैं। हमारे एप्लिकेशन में हम जैसे हैश टुकड़े का उपयोग कर रहे हैं:

http://ourdomain.com/#!list=last_ads&order=date 

मैं समझता हूँ कि गूगल इस url नहीं लाया और इस रूप में सर्वर को एक अनुरोध कर देगा: को छोड़कर

http://ourdomain.com/?_escaped_fragment_=list=last_ads?order=date&direction=desc 

सब कुछ एकदम सही है, .. ।

मैं मार्ग एक और स्क्रिप्ट के लिए अनुरोध इस तरह का

इसलिए की तरह चाहते हैं:

RewriteCond %{QUERY_STRING} ^_escaped_fragment_=(.*)$ 
RewriteRule ^$ /webroot/crawler.php$1 [L] 

समस्या है, कि मैं केवल जब मैं ($ _ अनुरोध) crawler.php में print_r करने की कोशिश:

Array 
(
    [_escaped_fragment_] => list=last_ads?order=date 
    [direction] => desc 
) 

मैं प्राप्त करना चाहते हैं क्या

Array 
(
    [list] => last_ads 
    [order] => date 
    [directions] => des 
) 

है मुझे पता है कि मैं पहले तर्क को तोड़ने के लिए PHP का उपयोग कर सकता हूं, लेकिन मैं नहीं चाहता;)

कृपया

सलाह दें

================================================ ==== संपादित करें ... पाठ और तर्क में कुछ सुधार

उत्तर

3

आपका भूल QSA निर्देश

RewriteCond %{QUERY_STRING} ^_escaped_fragment_=(.*)$ 
RewriteRule ^$ /webroot/crawler.php%1 [QSA,L] 

(हर किसी बिंदु = D याद किया) वैसे अपने $1 अच्छी तरह से है अरे ... बेकार है क्योंकि यह कुछ भी नहीं करने के लिए संदर्भित करता है। तो यह होना चाहिए:

RewriteCond %{QUERY_STRING} ^_escaped_fragment_=(.*)$ 
RewriteRule ^$ /webroot/crawler.php [QSA,L] 

मुझे बताएं कि यह काम करता है या नहीं।

+0

मुझे लगता है कि यह '$ 1' के बजाय '% 1' होना चाहिए http://stackoverflow.com/questions/6654834/difference-between-1-vs-1-in-htaccess – HerrSerker

+0

आप सही हैं। ठीक है, धन्यवाद! –

+1

फिर आपको उस टिप्पणी को $ 1 के बारे में भी छोड़ देना चाहिए। – HerrSerker

1

यदि मुझे गलत नहीं है।

RewriteCond %{QUERY_STRING} ^_escaped_fragment_=(.*)$ 
RewriteRule ^$ /webroot/crawler.php?%1 [L] 
+0

इसकी अगर crawler.php में जोड़ने के बेहतर print_r ($ _ जीईटी) में जोड़ने; आउटपुट एक सरणी होगी [ऐरे ([ऑर्डर] => दिनांक ....)] अन्य उदाहरणों में स्ट्रिंग नहीं है – user956584

1

हो सकता है कि आप के लिए स्पष्ट है, लेकिन बच गए पात्रों के बारे में बात करते हैं प्रलेखन में: Set up your server to handle requests for URLs that contain

क्रॉलर परिवर्तन के दौरान टुकड़ा में कुछ वर्णों का निकल जाता है। मूल टुकड़े को पुनः प्राप्त करने के लिए, खंड में सभी% XX वर्णों को अनदेखा करना सुनिश्चित करें। अधिक विशेष रूप से,% 26 & बनना चाहिए,% 20 एक स्थान बनना चाहिए,% 23 # होना चाहिए, और% 25% बनना चाहिए, और इसी तरह।

+0

मुझे कुछ समस्या थी "और 26" इसलिए मैं सरल फिक्स लिखता हूं: अगर (स्ट्रस्ट्र ($ _ सर्वर] 'QUERY_STRING'], '% 26')): $ _SERVER ['QUERY_STRING'] = urldecode ($ _ सर्वर ['QUERY_STRING']); parse_str ($ _ सर्वर ['QUERY_STRING'], $ _GET); एंडिफ़; – user956584

0

यहां एक समाधान है जो एक रूट करने योग्य यूआरएल और क्वेरी पैरामीटर को सर्वर साइड स्क्रिप्ट में प्रसंस्करण के लिए सही ढंग से सेट करता है।

उदाहरण: आप http://yoursite.com/#!/product/20 में .htaccess

RewriteCond %{QUERY_STRING} ^_escaped_fragment_=(.*)$ 
RewriteRule ^$ /crawler/index.php?_frag=%1 [L] 

हम URL में _escaped_fragment_ से छुटकारा पाने की जरूरत है http://yoursite.com/crawler/product/20

सबसे पहले हो जाते हैं और कुछ अलग है, उदाहरण के साथ बदलने के लिए चाहते हैं: तो _frag कि (अपाचे) वेब सर्वर सर्कुलर रीराइट्स में नहीं आता है।

crawler/index.php

<?php 

if(array_key_exists('_frag', $_REQUEST)) { 
    $_SERVER['REQUEST_URI']=$_REQUEST['_frag']; 
    unset($_REQUEST['_frag']); 
    parse_str($_SERVER['QUERY_STRING'], $frag); 
    parse_str(preg_replace('/^.*\?/', '', $frag['_frag']), $_REQUEST); 
    $_SERVER['QUERY_STRING'] = http_build_query($_REQUEST); 
} 

// Continue with your usual script of routing 
// $_REQUEST now contains the original query parameters 
0

आभासी मेजबान काम नहीं कर में htacess काम में में दूसरा, तो मैं "निर्देशिका"

<Directory "X:/DIR"> 
    RewriteEngine On 
    RewriteCond %{QUERY_STRING} ^_escaped_fragment_=(.*)$ 
    RewriteRule ^$ /crawler/index.php?_frag=%1 [L] 
</Directory>