मैं एंगुलरजेएस आधारित ऐप वाले अपने बैकएंड सर्वर पर रीडायरेक्ट करने के लिए एक स्थान ब्लॉक सेट करने का प्रयास कर रहा हूं जिसमें "#" वर्ण है। AngularJS HashLocationStrategy एक "#" आधारित रूटिंग नियम पेश करता है। इसलिए मैं अनिवार्य रूप से चाहता हूं कि "#" से शुरू होने वाला कोई भी URL मेरे बैकएंड सर्वर पर रीडायरेक्ट हो, लेकिन Nginx रूटिंग ऐसा करने में सक्षम नहीं है।

...
...
location ~ \/\#\/app.*$ {
    # backend server routing
}

location / {
    # redirects to static website
}
...
...

लेकिन यह लोकेशन मैपिंग काम नहीं कर रही है। उदाहरण के लिए: http://<hostname>/#/app को बैकएंड सर्वर पर रीडायरेक्ट करना चाहिए, लेकिन दूसरे स्थान ब्लॉक मिलान / के कारण, यह स्थिर वेबसाइट के index.html पर रीडायरेक्ट हो जाता है।

मैंने मैचर्स के साथ location ब्लॉक स्थापित करने का भी प्रयास किया जिसमें "#" वर्ण (यानी location ~ ^.*app.*$ {}) नहीं है, लेकिन यह काम नहीं किया है। यह अभी भी index.html पर रीडायरेक्ट करता है

दूसरे स्थान को देखने से पहले पहले स्थान ब्लॉक का सम्मान करने के लिए Nginx को कॉन्फ़िगर करने का कोई तरीका है।

0
anoviceuser 26 नवम्बर 2020, 20:20

1 उत्तर

सबसे बढ़िया उत्तर

नहीं, हम fragment (यानी # से शुरू) के आधार पर Nginx लोकेशन मैचर सेटअप नहीं कर सकते, क्योंकि यह सर्वर पर कभी नहीं भेजा जाता है। @RichardSmith के स्पष्टीकरण के लिए धन्यवाद (टिप्पणी अनुभाग देखें)

# आगे से यूआरएल का हिस्सा (जिसे टुकड़ा कहा जाता है) सर्वर पर कभी नहीं भेजा जाता है। इसका उपयोग ब्राउज़र या क्लाइंट-साइड JS एप्लिकेशन द्वारा किया जाता है - @RichardSmith

तो जिस पैटर्न को मैं स्थान मिलानकर्ता में मिलान करने का प्रयास कर रहा था वह कभी भी काम नहीं करेगा क्योंकि यह सर्वर तक कभी नहीं पहुंचता है।

0
anoviceuser 27 नवम्बर 2020, 04:18