redirect HTML5 ऐप्लिकेशन कैशे के साथ एकल पृष्ठ ऐप के लिए Nginx कॉन्फ़िग



single-page-application html5-appcache (1)

मैं एक एकल पृष्ठ ऐप तैयार करने की कोशिश कर रहा हूं जो HTML5 ऐप कैश का उपयोग करता है, जो प्रत्येक अलग यूआरएल के लिए ऐप के एक पूरे नए संस्करण को कैश करेगा, इस प्रकार मुझे हर किसी को रीडायरेक्ट करना होगा / और बाद में मेरा ऐप मार्ग लेगा (यह समाधान है devdocs.io पर इस्तेमाल किया)

यहाँ मेरा एनजीएनएफ़ कॉन्फ़िग है मुझे एक फ़ाइल भेजने के लिए सभी अनुरोध चाहते हैं यदि यह मौजूद है, /auth और /api पर मेरे API पर रीडायरेक्ट करें, और अन्य सभी अनुरोधों को index.html पर रीडायरेक्ट करें। निम्नलिखित विन्यास के कारण मेरा ब्राउज़र कहने के लिए क्यों एक रीडायरेक्ट लूप है? यदि उपयोगकर्ता स्थान ब्लॉक # 2 को प्रभावित करता है और उसका मार्ग स्थिर फ़ाइल से मेल नहीं खाता है, तो वह स्थान ब्लॉक # 3 पर भेजा जाता है, जो उसे "/" पर रीडायरेक्ट करेगा, जिसे स्थान ब्लॉक # 1 मारा जाना चाहिए और सूचकांक की वेबसाइट को सही करना चाहिए? क्या रीडायरेक्ट लूप का कारण यहां है? क्या यह पूरा करने का एक बेहतर तरीका है?

root /files/whatever/public;
index index.html;

# If the location is exactly "/", send index.html.
location = / {
    try_files $uri /index.html;
}

location / {
    try_files $uri @redirectToIndex;
}

# Set the cookie of the initialPath and redirect to "/".
location @redirectToIndex {
    add_header Set-Cookie "initialPath=$request_uri; path=/";
    return 302 $scheme://$host/;
}

# Proxy requests to "/auth" and "/api" to the server.
location ~* (^\/auth)|(^\/api) {
    proxy_pass http://application_upstream;
    proxy_redirect off;
}

उस लूप संदेश का सुझाव है कि /files/whatever/public/index.html मौजूद नहीं है, इसलिए स्थान में try_files / $ uri नहीं मिलती जब यह /index.html के बराबर होती है, तो try_files हमेशा आंतरिक रूप से उन अनुरोधों को रीडायरेक्ट करता है @ स्थान जो बाहरी रीडायरेक्ट करता है

जब तक आपके द्वारा उल्लिखित तुलना में अधिक जटिल सेटअप नहीं किया गया है, मुझे नहीं लगता कि आपको ऐसा करने की आवश्यकता है आपको बाहरी रीडायरेक्ट (या यहां तक ​​कि आंतरिक रीडायरेक्ट्स) की आवश्यकता नहीं होनी चाहिए या एक-फ़ाइल जेएस ऐप के लिए सर्वर-साइड कुकी भेजना चाहिए। ऐप और एपीआई के लिए रेगेक्स मैच बिल्कुल सही नहीं था, या तो

root /files/whatever/public;
index index.html;

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

# Proxy requests to "/auth" and "/api" to the server.
location ~ ^/(auth|api) {
    proxy_pass http://application_upstream;
    proxy_redirect off;
}