2011-03-21 15 views
8

मुझे आश्चर्य है कि एक स्थान या हैशबैंग (#!) यूआरएल के लिए nginx निर्देश को फिर से लिखना कैसा दिखता है। असल में सभी गैर हैश-टक्कर वाले यूआरएल को हैशबैंग के माध्यम से फ्रंट कंट्रोलर की तरह रूटिंग करना। तो:एनजीआईएनएक्स हैशबैंग फिर से लिखना

http://example.com/about/staff 

होगा

http://example.com/#!/about/staff 

मैं स्पष्ट नहीं क्या बेहतरीन तकनीक यहाँ होगा हूँ के लिए रास्ते में? क्या हैशबैंग के अस्तित्व की जांच करने के लिए एक कथन लिखना है, या सिर्फ एक सामान्य पुनर्लेख जो सभी अनुरोधों को फ़िल्टर करता है ...

उत्तर

11

खंड पहचानकर्ताओं के लिए जीईटी/कुछ नहीं होना चाहिए (कुछ छोटी गाड़ी ग्राहक उन्हें भेज सकते हैं) में दिखाई देते हैं HTTP अनुरोध, इसलिए वेबसर्वर की परवाह किए बिना, उनके पास मिलान करने के लिए आपके पास फिर से लिखने का नियम नहीं हो सकता है।

The HTTP engine cannot make any assumptions about it. The server is not even given it.

आप के लिए/to/# अनुप्रेषित प्रारंभिक अनुरोध करने की कोशिश की तो! रूट इंडेक्स की सेवा करने के बजाय, आप "बहुत अधिक रीडायरेक्ट" त्रुटि के साथ समाप्त हो जाएंगे, क्योंकि क्लाइंट वापस/बार पूछेगा (याद रखें कि यह # इसके अनुरोध के साथ नहीं भेजेगा)। आपको सूचकांक दस्तावेज़ के लिए जावास्क्रिप्ट के साथ ऐसा करने की आवश्यकता होगी।

नीचे पंक्ति यह है कि यह GET अनुरोध में सर्वर-साइड उपलब्ध नहीं है। यहां तक ​​कि curl has been patched इसे और भी भेजने के लिए नहीं।

आप सब कुछ और कुछ सामने नियंत्रक हालांकि हिट बनाने के लिए nginx स्थान निर्देशों हो सकता है:

location =/{ 
    }  

    location = /index.html { 
    }  

    location ~/{ 
    rewrite^/#!$uri redirect; 
    break; 
    } 

इस दृष्टिकोण से सावधान रहें, हालांकि, http://jenitennison.com/blog/node/154 गॉकर में हैशबैंग हार और इसके उपयोग के आसपास के अन्य मुद्दों के बारे में बहुत अधिक जानकारी देता है।

+0

बेहतर विकल्प 'try_files' निर्देश होगा। शायद यह जवाब दिया गया था जब यह जवाब दिया गया था। मेरा उत्तर देखें –

2

ऊपर का एक संशोधन के रूप में, मैं केवल विशिष्ट कॉल के लिए इस पुनर्निर्देशन करते हैं, और thusly कोई संभावित पाश पीठ मिलती है:

location ~ /login|/logout|portfolios|/portfolio/*|/public/* { 
    rewrite^/#!$uri permanent; 
    break; 
} 

ध्यान दें कि यह सफारी के अलावा सभी ब्राउज़र पर ठीक काम करता है। सफारी आपको यूआरएल के हैंश पर भेज देगा।

location { 
    try_files $uri $uri/ /index.html; 
} 

मानते हुए अपने index.html फ़ाइल जावास्क्रिप्ट तर्क यह है कि मार्गों सही संसाधन के हैश:

-1

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

+0

क्या आप '~' वेस खो रहे हैं? –

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