nginx: একক এইচটিএমএল পৃষ্ঠায় সমস্ত অনুরোধ প্রেরণ করুন


156

এনজিনেক্স ব্যবহার করে, আমি ইউআরএল সংরক্ষণ করতে চাই, তবে বাস্তবে যাই হোক না কেন একই পৃষ্ঠাটি লোড করুন। আমি History.getState()আমার জাভাস্ক্রিপ্ট অ্যাপ্লিকেশনটিতে অনুরোধগুলি রুট করতে url ব্যবহার করব use মনে হচ্ছে এটি করা সহজ জিনিস হওয়া উচিত?

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

কাজ করে, তবে ইউআরএল পুনর্নির্দেশ করে? আমার এখনও ইউআরএল দরকার, আমি সবসময় একই পৃষ্ঠাটি ব্যবহার করতে চাই।


6
এই প্রশ্নটি জিজ্ঞাসা করার জন্য ধন্যবাদ তাই উত্তরটি আমার জন্য প্রস্তুত ছিল :-)
লাসে বাঙ্ক

উত্তর:


191

আমি মনে করি এটি আপনার পক্ষে এটি করবে:

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

1
[উত্সাহ] 613 # 0: "ট্রাইফাইলেস" নির্দেশনায় অবৈধ আর্গুমেন্ট?
প্রিজমফেরিভিং কিছু

2
ঠিক আছে এটি চেষ্টা করুন: try_files $ uri /base.html;
অ্যালেক্স হাওয়ানস্কি

5
দ্রষ্টব্য - এটি প্রথমে অনুরোধ করা ফাইলটির জন্য যাচাই করবে এবং যদি এটি সেখানে না থাকে তবে এটি বেস html পরিবেশন করবে। সুতরাং নিশ্চিত হয়ে নিন যে আপনার ডকুমেন্টের রুট ডিরেক্টরিতে বসে কোনও পুরানো অতিরিক্ত ফাইল নেই, অথবা যদি জিজ্ঞাসা করা হয় তবে সেগুলি সরাসরি পরিবেশন করা হবে।
অ্যালেক্স হাওয়ানস্কি

22
try_files '' /base.html;(প্রথম আর্গুমেন্ট হিসাবে খালি স্ট্রিং try_files) ব্যবহার করা নামক কোনও ফাইলের অনুসন্ধান এড়ানো যায় $uri
ডেভিডজবি

17
try_files '' /base.html;আমাকে একটি পুনঃনির্দেশ সমস্যা এবং একটি অভ্যন্তরীণ সার্ভার ত্রুটি দিয়েছে, তবে এটির সংশোধন করে এটি try_files '' /base.html =404;স্থির করে, যদি এটি কাউকে সহায়তা করে।
উইলিয়াম তারেল

30

কেবল try_filesআমার ব্যবহারের জন্য কাজ হয়নি - এটি আমার লগগুলিতে পুনর্লিখন বা অভ্যন্তরীণ পুনঃনির্দেশ চক্রের ত্রুটির সৃষ্টি করে।

এনগিনেক্স ডক্সে কিছু অতিরিক্ত বিবরণ ছিল:

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 এছাড়াও এই সমস্যাটির জন্য পুরোপুরি বৈধ পন্থা।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.