nginx: सभी अनुरोधों को एक html पृष्ठ पर भेजें


156

Nginx का उपयोग करना, मैं url को संरक्षित करना चाहता हूं, लेकिन वास्तव में उसी पृष्ठ को लोड करता हूं जो कोई फर्क नहीं पड़ता। मैं History.getState()अपने जावास्क्रिप्ट ऐप में अनुरोधों को रूट करने के लिए url का उपयोग करूंगा । ऐसा लगता है कि यह एक साधारण बात होनी चाहिए?

location / {
    rewrite (.*) base.html break;
}

काम करता है, लेकिन यूआरएल को पुनर्निर्देशित करता है? मुझे अभी भी url की आवश्यकता है, मैं हमेशा एक ही पृष्ठ का उपयोग करना चाहता हूं।


6
इस सवाल को पूछने के लिए धन्यवाद तो जवाब मेरे लिए तैयार था :-)
लास बंक

जवाबों:


191

मुझे लगता है कि यह आपके लिए यह करेगा:

location / {
    try_files /base.html =404;
}

1
[emerg] 613 # 0: "try_files" निर्देश में तर्कों की अवैध संख्या?
प्रिज्मोफ़ेवरीथिंग

2
ठीक है यह कोशिश करो: try_files $ uri /base.html;
एलेक्स हॉवान्स्की

5
नोट - यह पहले अनुरोध की गई फ़ाइल के लिए जाँच करेगा, और यदि यह नहीं है, तो यह base.html पर काम करेगा। इसलिए सुनिश्चित करें कि आपको अपने दस्तावेज़ रूट डायरेक्टरी में आस-पास बैठी कोई पुरानी अतिरिक्त फाइलें नहीं मिली हैं, या यदि वे सीधे पूछताछ करेंगे तो उन्हें सीधे सेवा मिल जाएगी।
बजे एलेक्स हॉवान्स्की

22
का उपयोग करते हुए try_files '' /base.html;(पहले तर्क के रूप में खाली स्ट्रिंग try_files) नामक एक फाइल की तलाश से बचा जाता है $uri
डेविजजब

17
try_files '' /base.html;मुझे एक पुनर्निर्देशन समस्या और एक आंतरिक सर्वर त्रुटि दी, लेकिन यह try_files '' /base.html =404;तय करने के लिए कि अगर यह किसी की मदद करता है, तो संशोधित करना ।
विलियम तुरेल

30

सिर्फ try_filesमेरे लिए काम नहीं किया - यह मेरे लॉग में एक पुनर्लेखन या आंतरिक पुनर्निर्देशन चक्र त्रुटि का कारण बना ।

Nginx डॉक्स में कुछ अतिरिक्त विवरण थे:

http://nginx.org/en/docs/http/ngx_http_core_module.html#try_files

तो मैं निम्नलिखित का उपयोग कर समाप्त हुआ:

root /var/www/mysite;

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

location = /base.html {
    expires 30s;
}

1
try_files '' /base.html =404;(ऊपर देखें)
मार्क

यह मेरे लिए काम करता था, लेकिन मुझे वास्तव में इस location = /base.html { expires 30s }भाग की आवश्यकता नहीं थी ।
माछलर

17

आपके मूल पुनर्लेखन को लगभग काम करना चाहिए। मुझे यकीन नहीं है कि यह पुनर्निर्देशित क्यों होगा, लेकिन मुझे लगता है कि जो आप वास्तव में चाहते हैं वह सिर्फ है

rewrite ^ /base.html break;

आपको उस स्थान पर या सीधे सर्वर में रखने में सक्षम होना चाहिए।


13

यह मेरे लिए काम किया:

location / {
    alias /path/to/my/indexfile/;
    try_files $uri /index.html;
}

इसने मुझे एक जावास्क्रिप्ट-सिंगल-पेज ऐप के लिए एक कैच-ऑल URL बनाने की अनुमति दी। सीएसएस, फोंट, और जावास्क्रिप्ट जैसी सभी स्थिर फाइलें npm run build मिल जाएंगी, यदि वे उसी निर्देशिका में हैं index.html

यदि किसी कारण से स्टैटिक फाइलें किसी अन्य निर्देशिका में थीं, तो आपको कुछ इस तरह की आवश्यकता होगी:

# Static pages generated by "npm run build"
location ~ ^/css/|^/fonts/|^/semantic/|^/static/ {
    alias /path/to/my/staticfiles/;
}


7

सही तरीका होगा:

location / {
    rewrite (.*) base.html last;
}

पुनर्लेखन के परिणाम के अनुसार lastनिगनेक्स एक नए उपयुक्त locationब्लॉक का उपयोग करेगा ।

try_files इस समस्या के लिए पूरी तरह से मान्य दृष्टिकोण है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.