এস 3 স্ট্যাটিক ওয়েবসাইট হোস্টিং রুট সমস্ত সূচকে সূচক। Html


250

আমি একটি জাভাস্ক্রিপ্ট অ্যাপ্লিকেশন হোস্ট করতে এস 3 ব্যবহার করছি যা HTML5 পুশস্টেট ব্যবহার করবে St সমস্যাটি হল যদি ব্যবহারকারী কোনও ইউআরএল বুকমার্ক করে তবে এটি কোনও কিছুর সমাধান করবে না। আমার যা দরকার তা হ'ল একটি সম্পূর্ণ পুনর্নির্দেশ না করে সমস্ত এসআরএল অনুরোধগুলি গ্রহণ এবং আমার এস 3 বাল্টে মূল সূচক html পরিবেশন করার দক্ষতা। তারপরে আমার জাভাস্ক্রিপ্ট অ্যাপ্লিকেশনটি ইউআরএলকে বিশ্লেষণ করতে এবং সঠিক পৃষ্ঠাটি সরবরাহ করতে পারে।

পুনর্নির্দেশগুলি না করে সমস্ত ইউআরএল অনুরোধের জন্য সূচক html পরিবেশন করতে এস 3 কে বলার কোনও উপায় আছে কি? এই উদাহরণ হিসাবে যেমন একটি একক সূচক html পরিবেশন করে সমস্ত আগত অনুরোধগুলি পরিচালনা করতে অ্যাপাচি সেট আপ করার অনুরূপ হবে: https://stackoverflow.com/a/10647521/1762614 । আমি কেবল এই রুটগুলি পরিচালনা করতে কোনও ওয়েব সার্ভার চালানো এড়াতে চাই। এস 3 থেকে সবকিছু করা খুব আবেদনময়ী।


আপনি এই একটি সমাধান খুঁজে পেয়েছেন?
w2lame

উত্তর:


301

ক্লাউডফ্রন্ট সাহায্যে ইউআরএল হ্যাক ছাড়াই এটি সমাধান করা খুব সহজ।

  • এস 3 বালতি তৈরি করুন, উদাহরণস্বরূপ: প্রতিক্রিয়া জানান
  • এই সেটিংস সহ ক্লাউডফ্রন্ট বিতরণ তৈরি করুন:
    • ডিফল্ট রুট অবজেক্ট : index.html
    • মূল ডোমেন নাম : এস 3 বালতি ডোমেন, উদাহরণস্বরূপ: react.s3.amazonaws.com
  • ত্রুটি পৃষ্ঠাগুলি ট্যাবে যান , কাস্টম ত্রুটি প্রতিক্রিয়া তৈরি করুন ক্লিক করুন :
    • HTTP ত্রুটি কোড : 403: নিষিদ্ধ (404: পাওয়া যায়নি, এস 3 স্ট্যাটিক ওয়েবসাইটের ক্ষেত্রে)
    • ত্রুটি প্রতিক্রিয়া কাস্টমাইজ করুন : হ্যাঁ
    • প্রতিক্রিয়া পৃষ্ঠার পথ : /index.html
    • HTTP রেসপন্স কোড : 200: ঠিক আছে OK
    • তৈরি ক্লিক করুন

8
ধন্যবাদ। এখন পর্যন্ত সেরা উত্তর।
jgb

এবং যা এতটা সুস্পষ্ট নয় আপনি অবস্থান রাখেন যাতে আপনি "প্রাকৃতিক" রাউটিং করতে পারেন।
লুকাশজ মেরেক সিলসকি

5
এটি আমার জন্য আকর্ষণের মতো কাজ করেছিল, কেবল কাস্টম ত্রুটি কোডটি আমার দরকার ছিল 404, 403 নয়
জেরেমি এস

4
কিছুটা হ্যাক, তবে দুর্দান্ত কাজ করে :) খুব ভাল লাগবে যদি ক্লাউডফ্রন্ট কেবল আমাদের এস 3 ফাইলে (পুনর্নির্দেশ ছাড়াই) একাধিক পথের মানচিত্র দেয়।
বব

3
এটি আমার জন্য কাজ করছে না। এই সমাধানটি সর্বদা হোম পৃষ্ঠায় পুনঃনির্দেশ করে এবং সঠিক পৃষ্ঠাগুলি নয় ...
জিম

201

আমি যেভাবে এটি কাজ করতে পেরেছি তা নিম্নরূপ:

ইন সম্পাদনা পুনঃ দিকনির্দেশ রুলস আপনার ডোমেনের জন্য এস 3 কনসোল এর অধ্যায়, নিম্নলিখিত নিয়মগুলি যোগ করুন:

<RoutingRules>
  <RoutingRule>
    <Condition>
      <HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals>
    </Condition>
    <Redirect>
      <HostName>yourdomainname.com</HostName>
      <ReplaceKeyPrefixWith>#!/</ReplaceKeyPrefixWith>
    </Redirect>
  </RoutingRule>
</RoutingRules>

এটি সেই সমস্ত পাথ পুনঃনির্দেশিত করবে যা 404 টির জন্য আপনার রুট ডোমেনটিতে পাথের একটি হ্যাশ-ব্যাং সংস্করণ পাওয়া যায়নি। সুতরাং http://yourdomainname.com/posts http://yourdomainname.com/#!/posts এ পুনঃনির্দেশিত হবে শর্তিত যে সেখানে / পোস্টে কোনও ফাইল নেই।

এইচটিএমএল 5 পুসস্টেটগুলি ব্যবহার করার জন্য, আমাদের এই অনুরোধটি গ্রহণ করতে হবে এবং হ্যাশ-ব্যাং পথের উপর ভিত্তি করে সঠিকভাবে পুশস্টেটটি ম্যানুয়ালি স্থাপন করতে হবে। সুতরাং এটি আপনার সূচক html ফাইলের শীর্ষে যুক্ত করুন:

<script>
  history.pushState({}, "entry page", location.hash.substring(1));
</script>

এটি হ্যাশ ধরে এবং এটি একটি HTML5 পুশ স্টেটে রূপান্তরিত করে। এই বিন্দু থেকে আপনি আপনার অ্যাপ্লিকেশনটিতে হ্যাশ-ব্যাং পাথ না পাওয়ার জন্য পুস্টস্টেটগুলি ব্যবহার করতে পারেন।


4
এই সমাধান দুর্দান্ত কাজ করে! প্রকৃতপক্ষে এইচটিএমএল মোডটি কনফিগার করা থাকলে অ্যাঙ্গুলারগুলি স্বয়ংক্রিয়ভাবে ইতিহাসের পুস্টস্টেটটি করবে।
wcandillon

1
আপনি যদি আপনার ইউআরএলগুলিতে জিইটি প্যারাম অন্তর্ভুক্ত করেন, তবে এটি আইই এর পুরানো সংস্করণ সহ ব্যর্থ হবে? আপনি কীভাবে এই সমস্যাটি পেতে পারেন?
ক্লেক্সমন্ড

3
ধন্যবাদ! এটি একটি ছোট ঝাঁকুনির সাহায্যে ব্যাকবোনটিতে আমার পক্ষে ভাল কাজ করেছে। আমি পুরানো ব্রাউজারগুলির জন্য একটি চেক জুড়েছি: <script language="javascript"> if (typeof(window.history.pushState) == 'function') { window.history.pushState(null, "Site Name", window.location.hash.substring(2)); } else { window.location.hash = window.location.hash.substring(2); } </script>
এই গ্রে

10
react-routerএইচটিএমএল 5 পুসস্টেটস এবং<ReplaceKeyPrefixWith>#/</ReplaceKeyPrefixWith>
ফেলিক্স ডি

5
এটি সাফারি কার্যকর করে না এবং স্থাপনার কৌশলটি নিয়ে একটি বড় সমস্যা। পুনঃনির্দেশের জন্য একটি ছোট জেএস লিখতে একরকম জঞ্জাল পদ্ধতি। এছাড়াও, পুনঃনির্দেশের সংখ্যাটিও একটি সমস্যা। আমি সবসময় S3 url- এর সূচক html এ নির্দেশ করার কোনও উপায় আছে কিনা তা বোঝার চেষ্টা করছি।
moha297

129

অন্যদের দ্বারা উল্লিখিত S3 / পুনর্নির্দেশ ভিত্তিক পদ্ধতির সাথে কয়েকটি সমস্যা রয়েছে।

  1. আপনার অ্যাপ্লিকেশনগুলির পাথগুলি সমাধান হওয়ার সাথে সাথে মাল্টলি রিডাইরেক্টগুলি ঘটে। উদাহরণস্বরূপ: www.myapp.com/path/for/test www.myapp.com/#/path/for/test হিসাবে পুনঃনির্দেশিত হয়
  2. '#' এসে আপনার এসপিএ কাঠামোর ক্রিয়াকলাপের কারণে ইউআরএল বারে একটি ফ্লিকার রয়েছে।
  3. এসইও প্রভাবিত হয় কারণ - 'আরে! এটি গুগল পুনর্নির্দেশগুলিতে তার হাত জোর
  4. আপনার অ্যাপ্লিকেশনটির জন্য সাফারি সমর্থন একটি টস হিসাবে যায়।

সমাধানটি হ'ল:

  1. আপনার ওয়েবসাইটের জন্য সূচি রুটটি কনফিগার করা আছে তা নিশ্চিত করুন। বেশিরভাগ ক্ষেত্রে এটি সূচক। Html
  2. এস 3 কনফিগারেশনগুলি থেকে রাউটিং বিধিগুলি সরান
  3. আপনার এস 3 বালতির সামনে একটি ক্লাউডফ্রন্ট রাখুন।
  4. আপনার ক্লাউডফ্রন্ট উদাহরণের জন্য ত্রুটি পৃষ্ঠার নিয়মগুলি কনফিগার করুন। ত্রুটি বিধিগুলিতে নির্দিষ্ট করুন:

    • এইচটিপি ত্রুটি কোড: 404 (এবং 403 বা প্রয়োজন অনুসারে অন্যান্য ত্রুটি)
    • ন্যূনতম টিটিএল (সেকেন্ড) কেশ করার সময় ত্রুটি: 0
    • কাস্টমাইজ প্রতিক্রিয়া: হ্যাঁ
    • প্রতিক্রিয়া পৃষ্ঠার পথ: /index.html
    • এইচটিটিপি রেসপন্স কোড: 200

      1. এসইওর প্রয়োজনের জন্য + আপনার সূচি html ক্যাশে না করে তা নিশ্চিত করে নিন:
    • একটি ইসি 2 ইভেন্টটি কনফিগার করুন এবং একটি এনগিনেক্স সার্ভার সেটআপ করুন।

    • আপনার ইসি 2 দৃষ্টান্তে সর্বজনীন আইপি বরাদ্দ করুন।
    • একটি ELB তৈরি করুন যা EC2 দৃষ্টান্ত হিসাবে আপনি উদাহরণ হিসাবে তৈরি করেছেন
    • আপনার ডিএনএসে আপনার ELB বরাদ্দ করতে সক্ষম হওয়া উচিত।
    • নিম্নলিখিত জিনিসগুলি করতে এখন আপনার এনগিনেক্স সার্ভারটি কনফিগার করুন: আপনার সিডিএন-এর সমস্ত অনুরোধের জন্য প্রক্সি_পাস করুন (কেবলমাত্র সূচিপত্রের জন্য, আপনার ক্লাউডফ্রন্ট থেকে অন্য সম্পদগুলি সরাসরি পরিবেশন করুন) এবং অনুসন্ধান বটগুলির জন্য, প্রেরেন্ডার.ওয়ের মতো পরিষেবাদি দ্বারা নির্ধারিত ট্র্যাফিক পুনঃনির্দেশ করুন

আমি এনজিএনএক্স সেটআপের বিষয়ে আরও বিশদে সাহায্য করতে পারি, কেবল একটি নোট রেখে দিন। এটা হার্ড উপায় শিখেছি।

ক্লাউড ফ্রন্ট বিতরণ আপডেট একবার। একবারে আধ্যাত্মিক মোডে থাকতে আপনার ক্লাউডফ্রন্টের ক্যাশেটি অবৈধ করুন। ব্রাউজারে ইউআরএল হিট করুন এবং সমস্ত ভাল হওয়া উচিত।


6
যেহেতু এস 3 কোনও 403 নিষিদ্ধের সাথে সাড়া দেয় যখন কোনও ফাইল উপস্থিত না থাকে, আমি মনে করি উপরের 4 ধাপটি এইচটিপি ত্রুটি কোড 403 এর জন্যও নকল করতে হবে
আন্দ্রেস

4
আমার জন্য এটিই একমাত্র উত্তর যা প্রত্যাশিত (গৃহীত) আচরণে ফলাফল দেয়
mabe.berlin

1
@ পয়েন্ট 5 এ moha297 আপনি মূলত সিএনএন থেকে প্রক্সি যা এনজিনেক্স থেকে আনার জন্য আপনার সাইটটি কনফিগার করছেন (সূত্রের html এবং ক্রলার অনুরোধ ব্যতীত)? যদি এটি হয় তবে আপনি সিডিএন এজ সার্ভারগুলির সুবিধাটি হারাবেন না?
রাহুল প্যাটেল

2
@ moha297 আপনি কি দয়া করে এই মন্তব্যটি ব্যাখ্যা করতে পারেন: "আপনারা কখনই সিডিএন থেকে সূচি html পরিবেশন করা উচিত নয়"? ক্লাউডফ্রন্টের সাথে এস 3 থেকে সূচক html সরবরাহ করার ক্ষেত্রে আমি সমস্যাটি দেখছি না।
কার্ল জি

1
0 টি-এর টিটিএল কীভাবে চিকিত্সা করা হয় সে সম্পর্কে আরও তথ্যের জন্য stackoverflow.com/a/10622078/4185989 দেখুন (সংক্ষিপ্ত সংস্করণ: এটি ক্লাউডফ্রন্টের মাধ্যমে ক্যাশে হয়ে যায় তবে একটি If-Modified-Sinceজিইটি অনুরোধ উত্সকে প্রেরণ করা হয়) - লোকেরা না চাওয়ার পক্ষে কার্যকর বিবেচনা হতে পারে পদক্ষেপ 5 এর মত একটি সার্ভার সেট আপ করতে
জেএমকিউ

18

এটি স্পর্শকাতর, তবে র‌্যাক্টের প্রতিক্রিয়া রাউটার লাইব্রেরি (এইচটিএমএল 5) ব্রাউজার ইতিহাসের সাথে যারা এস 3 এ হোস্ট করতে চান তাদের ব্যবহার করছেন a

মনে করুন কোনও ব্যবহারকারী /foo/bearআপনার S3- হোস্টেড স্ট্যাটিক ওয়েব সাইটে দেখেছে। প্রদত্ত ডেভিড এর আগে পরামর্শ , পুনর্নির্দেশ নিয়ম তাদের পাঠাব /#/foo/bear। যদি আপনার অ্যাপ্লিকেশনটি ব্রাউজারের ইতিহাস ব্যবহার করে তৈরি হয় তবে এটি খুব ভাল করবে না। তবে আপনার অ্যাপ্লিকেশনটি এই মুহুর্তে লোড করা হয়েছে এবং এটি এখন ইতিহাসকে ম্যানিপুলেট করতে পারে।

আমাদের প্রকল্পে র্যাক্ট ইতিহাস সহ ( প্রতিক্রিয়া রাউটার প্রকল্পের কাস্টম হিস্ট্রিগুলি ব্যবহার করে দেখুনও ), আপনি এমন শ্রোতা যুক্ত করতে পারেন যা হ্যাশ ইতিহাসের পথগুলি সম্পর্কে সচেতন এবং যথাযথভাবে সেই পথটি প্রতিস্থাপন করতে পারেন, উদাহরণস্বরূপ:

import ReactDOM from 'react-dom';

/* Application-specific details. */
const route = {};

import { Router, useRouterHistory } from 'react-router';
import { createHistory } from 'history';

const history = useRouterHistory(createHistory)();

history.listen(function (location) {
  const path = (/#(\/.*)$/.exec(location.hash) || [])[1];
  if (path) history.replace(path);
});

ReactDOM.render(
  <Router history={history} routes={route}/>,
  document.body.appendChild(document.createElement('div'))
);

পুনরুদ্ধার করতে:

  1. ডেভিড এর এস 3 পুনর্নির্দেশ নিয়ম নির্দেশ করবে /foo/bearকরার /#/foo/bear
  2. আপনার অ্যাপ্লিকেশন লোড হবে।
  3. ইতিহাস শ্রোতা #/foo/bearইতিহাস স্বরলিপি সনাক্ত করবে ।
  4. এবং ইতিহাসকে সঠিক পথ দিয়ে প্রতিস্থাপন করুন।

Linkট্যাগগুলি প্রত্যাশা অনুযায়ী কাজ করবে, যেমন অন্যান্য ব্রাউজারের ইতিহাসের কাজ করে। কেবলমাত্র খারাপ দিক যা আমি লক্ষ্য করেছি তা আন্তঃস্থায়ী পুনঃনির্দেশ যা প্রাথমিক অনুরোধে ঘটে।

এটি AngularJS এর ​​সমাধান দ্বারা অনুপ্রাণিত হয়েছিল এবং আমার সন্দেহ হয় যে কোনও অ্যাপ্লিকেশনটিতে সহজেই মানিয়ে নেওয়া যেতে পারে।


2
এটি আমাকে মাইকেলকে সহায়তা করেছে, ধন্যবাদ! আপনি ইতিহাস থেকে আপনার রেফারেন্স পরিবর্তন করতে এবং কেবল ব্রাউজারহিসটরি ব্যবহার করতে চাইতে পারেন। অর্থাত্browserHistory.listen
মার্শাল মওটেনট

আপনাকে স্বাগতম! সাহায্য করে আনন্দ পেলাম. এছাড়াও, সম্মত হয়েছে এবং এই বিশেষ ব্যবহারের ক্ষেত্রে আমি প্রতিক্রিয়া রাউটার থেকে অবহেলার সতর্কতা সমাধান করার জন্য স্নিপেট আপডেট করেছি।
মাইকেল আহ্লার 21

রিঅ্যাক্ট-রাউটার v3.0.0 প্রকাশের সাথে এটি কাজ করে না, কারণ প্রতিক্রিয়া-রাউটার v3.0.0 ইতিহাস v3.0.0 ব্যবহার করে
বারান্দ পেজেস্কিয়ান

ইতিহাস.লিস্টিন অফ অসীম কল লুপ কীভাবে প্রতিরোধ করবেন? আমার অনুমানের পথটি প্রতিস্থাপনের মাধ্যমে ঘটেছে।
মিরকো ফ্লাইকটম্যান

14

আমি এই সমস্যার 4 টি সমাধান দেখতে পাচ্ছি। প্রথম 3 টি ইতিমধ্যে উত্তরে wereাকা ছিল এবং শেষটি আমার অবদান।

  1. ত্রুটি দস্তাবেজকে index.html এ সেট করুন।
    সমস্যা : প্রতিক্রিয়া সংস্থাটি সঠিক হবে, তবে স্থিতি কোডটি 404 হবে, যা এসইওকে ব্যথা করে।

  2. পুনঃনির্দেশের নিয়মগুলি সেট করুন।
    সমস্যা : ইউআরএল দূষিত হয় #!এবং লোড হয়ে গেলে পৃষ্ঠা ফ্ল্যাশ হয়।

  3. ক্লাউডফ্রন্ট কনফিগার করুন।
    সমস্যা : সমস্ত পৃষ্ঠাগুলি উত্স থেকে 404 ফেরত আসবে, তাই আপনি যদি কোনও কিছু ক্যাশে না করেন (টিটিএল 0 প্রস্তাবিত হিসাবে) বা আপনার ক্যাশে হবে এবং সাইট আপডেট করার সময় সমস্যা আছে তা বেছে নেওয়া দরকার।

  4. সমস্ত পৃষ্ঠা প্রেরেন্ডার করুন।
    সমস্যা : পৃষ্ঠাগুলি ঘন ঘন পরিবর্তিত হয় বিশেষত যখন পৃষ্ঠাগুলি পূর্বনির্ধারিত করতে অতিরিক্ত কাজ। উদাহরণস্বরূপ, একটি নিউজ ওয়েবসাইট।

আমার পরামর্শটি 4 বিকল্পটি ব্যবহার করা হয় আপনি যদি সমস্ত পৃষ্ঠাগুলি পূর্বনির্ধারিত করেন তবে প্রত্যাশিত পৃষ্ঠাগুলির জন্য 404 ত্রুটি থাকবে না। পৃষ্ঠাটি সূক্ষ্মভাবে লোড হবে এবং ফ্রেমওয়ার্কটি নিয়ন্ত্রণ নেবে এবং এসপিএ হিসাবে সাধারণত কাজ করবে। আপনি জেনেরিক ত্রুটি। Html পৃষ্ঠা প্রদর্শন করতে ত্রুটি দলিলটি সেট করতে পারেন এবং 404 এইচটিএমএল পৃষ্ঠাতে (হ্যাশবাং ছাড়াই) 404 ত্রুটিগুলি পুনর্নির্দেশ করতে একটি পুনর্নির্দেশের নিয়মও সেট করতে পারেন।

403 নিষিদ্ধ ত্রুটিগুলি সম্পর্কে, আমি এগুলিকে একেবারেই হতে দিচ্ছি না। আমার অ্যাপ্লিকেশনটিতে, আমি বিবেচনা করি যে হোস্ট বালতির মধ্যে থাকা সমস্ত ফাইলই সর্বজনীন এবং আমি পড়ার অনুমতি নিয়ে প্রত্যেকের বিকল্পের সাথে এটি সেট করেছি । আপনার সাইটে যদি ব্যক্তিগত পৃষ্ঠাগুলি থাকে তবে ব্যবহারকারীকে এইচটিএমএল লেআউটটি দেখার সুযোগ দেওয়া উচিত নয়। আপনার যা রক্ষা করতে হবে তা হ'ল ডেটা এবং এটি ব্যাকএন্ডে করা হয়।

এছাড়াও, যদি আপনার ব্যক্তিগত সম্পত্তি যেমন ব্যবহারকারীর ফটোগুলি থাকে তবে আপনি এগুলিকে অন্য বালতিতে সংরক্ষণ করতে পারেন । কারণ ব্যক্তিগত সম্পদের ডেটা হিসাবে একই যত্নের প্রয়োজন এবং অ্যাপটি হোস্ট করার জন্য ব্যবহৃত সম্পদ ফাইলগুলির সাথে তুলনা করা যায় না।


1
এবং আপনার সাইটের সমস্ত পৃষ্ঠাগুলির পূর্বনির্ধারিত ব্যবহারের দুর্দান্ত উদাহরণ রয়েছে। zanon.io/posts/… .- ধন্যবাদ
frekele

এই চতুর্থ পদ্ধতির কি পুশস্টেট URL টি পুনরায় লোড করা ব্যবহারকারীকে সম্বোধন করবে? এটি ঠিকমতো নেভিগেশন পরিচালনা করে তবে একটি পুনরায় লোড এ এটি এখনও সার্ভারে পৌঁছে যাবে।
আলফা

@ আলফা, আমি নিশ্চিত না যে আমি আপনার প্রশ্নটি সঠিকভাবে বুঝতে পেরেছি কিনা তবে পুনরায় লোডে এটি একটি নতুন অনুরোধ হিসাবে কাজ করবে। এস 3 অনুরোধটি গ্রহণ করবে এবং আবার পূর্বনির্ধারিত পৃষ্ঠাটি ফিরিয়ে দেবে। এক্ষেত্রে কোনও সার্ভার নেই।
জ্যানন

@ জ্যানন আহ, আমি মনে করি আমি বুঝতে পেরেছি। আমি ভেবেছিলাম এটি পূর্বনির্ধারিত পৃষ্ঠাগুলি ক্যাশে করা এবং এস 3 অসামঞ্জস্য সংস্থানগুলির জন্য যাওয়া এড়ানো was এটি গতিশীল উপাদান আছে যে রুট ছেড়ে দিতে হবে, তাই না?
আলফা

1
@ জ্যানন আমি শেষ পর্যন্ত বুঝতে পারি - ধন্যবাদ! হ্যাঁ, এটাই আমি বোঝাতে চাইছিলাম :)
আলফা

13

আমি আজ একই সমস্যায় পড়েছি কিন্তু @ মার্ক-নিউটারের সমাধানটি আমার কৌণিক অ্যাপ্লিকেশন থেকে হ্যাশবাং অপসারণের জন্য অসম্পূর্ণ ছিল।

আসলে আপনাকে সম্পাদনা অনুমতিতে যেতে হবে , আরও অনুমতি যুক্ত করতে ক্লিক করুন যুক্ত করতে এবং তারপরে প্রত্যেককে নিজের বালতিতে ডান তালিকা যুক্ত করুন। এই কনফিগারেশনের মাধ্যমে, এডাব্লুএস এস 3 এখন 404 ত্রুটি ফিরিয়ে দিতে সক্ষম হবে এবং তারপরে পুনঃনির্দেশের নিয়মটি কেসটি যথাযথভাবে ধরবে।

ঠিক এই রকম : এখানে চিত্র বর্ণনা লিখুন

এবং তারপরে আপনি পুনর্নির্দেশের নিয়মগুলি সম্পাদনা করতে পারেন এবং এই বিধিটি যুক্ত করতে পারেন :

<RoutingRules>
    <RoutingRule>
        <Condition>
            <HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals>
        </Condition>
        <Redirect>
            <HostName>subdomain.domain.fr</HostName>
            <ReplaceKeyPrefixWith>#!/</ReplaceKeyPrefixWith>
        </Redirect>
    </RoutingRule>
</RoutingRules>

এখানে আপনি আপনার ডোমেন এবং এর সাথে হোস্টনাম সাবডোমেন.ডোমেন.ফার প্রতিস্থাপন করতে পারেন কীপ্রেফিক্স #! / এর / যদি আপনি এসইও উদ্দেশ্যে হ্যাশবাং পদ্ধতি ব্যবহার না করেন।

অবশ্যই, যদি আপনি ইতিমধ্যে আপনার কৌণিক অ্যাপ্লিকেশনটিতে html5mode সেটআপ করে থাকেন তবে এগুলি সবই কাজ করবে।

$locationProvider.html5Mode(true).hashPrefix('!');

এটির সাথে আমার একমাত্র সমস্যা হ'ল আপনার কাছে হ্যাশবাংয়ের ফ্ল্যাশ রয়েছে, যা আপনার কাছে একটি এনজিনেক্স নিয়মের মতো কিছু নয়। ব্যবহারকারী একটি পৃষ্ঠায় রয়েছে এবং রিফ্রেশ করে: / পণ্য / 1 -> #! / পণ্য / 1 -> / পণ্য / 1
ইনটেলিক্স

1
আমি মনে করি প্রত্যেককে তালিকাভুক্তির অনুমতি দেওয়ার পরিবর্তে আপনার 403 ত্রুটির জন্য একটি বিধি যুক্ত করা উচিত।
হামিশ মোফতাত

11

অ্যাঙ্গুলার 2+ অ্যাপ্লিকেশনটি অ্যামাজন এস 3 এবং কর্মরত সরাসরি ইউআরএল থেকে তৈরি করার সহজ সমাধান হ'ল S3 বালতি কনফিগারেশনে সূচি এবং ত্রুটি নথি উভয় সূচক এবং ত্রুটিযুক্ত নথি হিসাবে সূচক html উল্লেখ করা।

এখানে চিত্র বর্ণনা লিখুন


11
এটি এই ভারী নিম্নচ্যুত উত্তরের একই উত্তর । এটি সূক্ষ্মভাবে কাজ করে, তবে কেবল bodyপ্রতিক্রিয়ার জন্য। স্থিতি কোডটি 404 হবে এবং এটি এসইওর ক্ষতি করবে।
জানন

কারণ এটি কেবল তখনই কাজ করে bodyযদি আপনি কোনও স্ক্রিপ্টগুলি আমদানি করেন যা headসেগুলি কার্যকর হবে না যখন আপনি সরাসরি আপনার ওয়েবসাইটের কোনও সাব-রুটগুলিতে হিট করবেন
মোহাম্মদ হাজর

4

যেহেতু সমস্যাটি এখনও রয়েছে আমি অন্য সমাধানে ফেলেছি। আমার কেসটি হ'ল আমি [মাইডোমাইন] / পুল-অনুরোধ / [পিআর নাম্বার] / /
প্রাক্তন www.example.com/pull-requests/822/ এ অ্যাক্সেসযোগ্য হয়ে ওঠার আগে পরীক্ষার জন্য সমস্ত টানা অনুরোধগুলি s3 এ স্বয়ংক্রিয়ভাবে স্থাপন করতে চেয়েছিলাম www . )

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

সুতরাং আমি আমার ডোমেনটি আমার সার্ভারের দিকে ইঙ্গিত করেছি যেখানে নিম্নলিখিত nginx কনফিগারেশনটি কাজ করেছে

location /pull-requests/ {
    try_files $uri @get_files;
}
location @get_files {
    rewrite ^\/pull-requests\/(.*) /$1 break;
    proxy_pass http://<your-amazon-bucket-url>;
    proxy_intercept_errors on;
    recursive_error_pages on;
    error_page 404 = @get_routes;
}

location @get_routes {
    rewrite ^\/(\w+)\/(.+) /$1/ break;
    proxy_pass http://<your-amazon-bucket-url>;
    proxy_intercept_errors on;
    recursive_error_pages on;
    error_page 404 = @not_found;
}

location @not_found {
    return 404;
}

এটি ফাইলটি পাওয়ার চেষ্টা করে এবং যদি এটি না পাওয়া যায় তবে ধরে নেওয়া যায় এটি এইচটিএমএল 5 রুট এবং এটি চেষ্টা করে। খুঁজে পাওয়া যায় না এমন রাস্তার জন্য আপনার কাছে যদি 404 কৌণিক পৃষ্ঠা থাকে তবে আপনি কখনই @ নোট_ফাউন্ডে পৌঁছাতে পারবেন না এবং ফাইলগুলি খুঁজে না পাওয়ার পরিবর্তে কৌনিক 404 পৃষ্ঠা ফিরে পাবেন, যা @get_routes বা কিছু কিছুতে নিয়ম করে কিছু দিয়ে স্থির করা যেতে পারে।

আমাকে বলতে হবে যে আমি এনজিএনএক্স কনফিগারেশনের ক্ষেত্রে খুব স্বাচ্ছন্দ্য বোধ করি না এবং এজন্য রেজেক্স ব্যবহার করে, আমি এই কাজটি কিছু পরীক্ষার এবং ত্রুটির সাথে পেয়েছি সুতরাং এই কাজটি করার সময় আমি নিশ্চিত যে উন্নতির কোনও জায়গা আছে এবং দয়া করে আপনার মতামতগুলি ভাগ করে নিন ।

দ্রষ্টব্য : s3 টি পুনর্নির্দেশের নিয়মগুলি যদি আপনার এস 3 কনফিগারেশনে থাকে তবে সরিয়ে দিন।

এবং বিটিডাব্লু সাফারিতে কাজ করে


হাই .. সমাধানের জন্য ধন্যবাদ ... আপনি এস 3 স্থাপনার জন্য এই এনগিনেক্স কনফ ফাইলটি কোথায় রাখবেন। এটি কি ইলাস্টিক বেনস্টালকের মতো যেখানে আমাকে। এক্সটেনশন ফোল্ডারটি তৈরি করতে এবং এটি প্রক্সি.কনফিগ ফাইলে রাখতে হবে?
ব্যবহারকারী3124360

@ ব্যবহারকারী3124360 ইলাস্টিক বিটস্ট্যাক সম্পর্কে নিশ্চিত নন তবে আমার ক্ষেত্রে আমি আমার ডোমেনের নামটি ইক্য 2 উদাহরণে দেখিয়েছি এবং সেখানে এনগিনেক্স কনফিগারেশন রয়েছে। সুতরাং অনুরোধ ক্লায়েন্ট -> ডিএনএস -> ইসি 2 -> এস 3 -> ক্লায়েন্টে যায়।
অ্যান্ড্রু আর্নাউতভ

হ্যাঁ আমি এখানে খুব অনুরূপ কিছু করছি ... এখানে এনজিএনক্স কনফিগারেশনের সাথে github.com/davezuko/react-redux-starter-kit/issues/1099 ... আপনার কনফারেন্স ফাইল পোস্ট করার জন্য ধন্যবাদ .. আমি দেখি কীভাবে এই ইসি 2 -> এস 3 সংযোগ এখন
ব্যবহারকারী 3124360

3

একই ধরণের সমস্যা খুঁজছিল। আমি উপরে বর্ণিত প্রস্তাবিত সমাধানগুলির মিশ্রণটি ব্যবহার করে শেষ করেছি।

প্রথমত, আমার একাধিক ফোল্ডার সহ একটি এস 3 বালতি রয়েছে, প্রতিটি ফোল্ডার একটি প্রতিক্রিয়া / রিডেক্স ওয়েবসাইট উপস্থাপন করে। আমি ক্যাশে অবৈধকরণের জন্য ক্লাউডফ্রন্টও ব্যবহার করি।

সুতরাং 404 সমর্থন করার জন্য আমাকে রাউটিং বিধিগুলি ব্যবহার করতে হয়েছিল এবং সেগুলি হ্যাশ কনফিগারেশনে পুনর্নির্দেশ করতে হয়েছিল:

<RoutingRules>
    <RoutingRule>
        <Condition>
            <KeyPrefixEquals>website1/</KeyPrefixEquals>
            <HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals>
        </Condition>
        <Redirect>
            <Protocol>https</Protocol>
            <HostName>my.host.com</HostName>
            <ReplaceKeyPrefixWith>website1#</ReplaceKeyPrefixWith>
        </Redirect>
    </RoutingRule>
    <RoutingRule>
        <Condition>
            <KeyPrefixEquals>website2/</KeyPrefixEquals>
            <HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals>
        </Condition>
        <Redirect>
            <Protocol>https</Protocol>
            <HostName>my.host.com</HostName>
            <ReplaceKeyPrefixWith>website2#</ReplaceKeyPrefixWith>
        </Redirect>
    </RoutingRule>
    <RoutingRule>
        <Condition>
            <KeyPrefixEquals>website3/</KeyPrefixEquals>
            <HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals>
        </Condition>
        <Redirect>
            <Protocol>https</Protocol>
            <HostName>my.host.com</HostName>
            <ReplaceKeyPrefixWith>website3#</ReplaceKeyPrefixWith>
        </Redirect>
    </RoutingRule>
</RoutingRules>

আমার জেএস কোডে, আমার এটিকে baseNameরিঅ্যাক্ট-রাউটারের জন্য একটি কনফিগার দিয়ে পরিচালনা করতে হবে । প্রথমত, নিশ্চিত হয়ে নিন যে আপনার নির্ভরতা আন্তঃব্যক্তিক, আমি ইনস্টল করেছিলাম যা history==4.0.0বেমানান ছিলreact-router==3.0.1

আমার নির্ভরতাগুলি হ'ল:

  • "ইতিহাস": "৩.২.০",
  • "প্রতিক্রিয়া": "15.4.1",
  • "প্রতিক্রিয়া-রিডাক্স": "4.4.6",
  • "প্রতিক্রিয়া-রাউটার": "3.0.1",
  • "প্রতিক্রিয়া-রাউটার-রিডাক্স": "4.0.7",

history.jsইতিহাস লোড করার জন্য আমি একটি ফাইল তৈরি করেছি :

import {useRouterHistory} from 'react-router';
import createBrowserHistory from 'history/lib/createBrowserHistory';

export const browserHistory = useRouterHistory(createBrowserHistory)({
    basename: '/website1/',
});

browserHistory.listen((location) => {
    const path = (/#(.*)$/.exec(location.hash) || [])[1];
    if (path) {
        browserHistory.replace(path);
    }
});

export default browserHistory;

কোডের এই টুকরাটি হ্যাশ দিয়ে সেভের দ্বারা প্রেরিত 404 টি পরিচালনা করার অনুমতি দেয় এবং আমাদের রুটগুলি লোড করার জন্য ইতিহাসে এগুলি প্রতিস্থাপন করে।

আপনি এখন আপনার স্টোরটি আপনার রুট ফাইলটিকে কনফিগার করার জন্য এই ফাইলটি ব্যবহার করতে পারেন।

import {routerMiddleware} from 'react-router-redux';
import {applyMiddleware, compose} from 'redux';

import rootSaga from '../sagas';
import rootReducer from '../reducers';

import {createInjectSagasStore, sagaMiddleware} from './redux-sagas-injector';

import {browserHistory} from '../history';

export default function configureStore(initialState) {
    const enhancers = [
        applyMiddleware(
            sagaMiddleware,
            routerMiddleware(browserHistory),
        )];

    return createInjectSagasStore(rootReducer, rootSaga, initialState, compose(...enhancers));
}
import React, {PropTypes} from 'react';
import {Provider} from 'react-redux';
import {Router} from 'react-router';
import {syncHistoryWithStore} from 'react-router-redux';
import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider';
import getMuiTheme from 'material-ui/styles/getMuiTheme';
import variables from '!!sass-variable-loader!../../../css/variables/variables.prod.scss';
import routesFactory from '../routes';
import {browserHistory} from '../history';

const muiTheme = getMuiTheme({
    palette: {
        primary1Color: variables.baseColor,
    },
});

const Root = ({store}) => {
    const history = syncHistoryWithStore(browserHistory, store);
    const routes = routesFactory(store);

    return (
        <Provider {...{store}}>
            <MuiThemeProvider muiTheme={muiTheme}>
                <Router {...{history, routes}} />
            </MuiThemeProvider>
        </Provider>
    );
};

Root.propTypes = {
    store: PropTypes.shape({}).isRequired,
};

export default Root;

আশা করি এটা সাহায্য করবে. আপনি এই কনফিগারেশনের সাথে লক্ষ্য করবেন আমি রাউডিংয়ের মাধ্যমে জাভাস্ক্রিপ্ট অ্যাসিঙ্ক্রোভনলি লোড করার জন্য হুডব্রিউ ইনজেক্টর এবং একটি হোমব্রিউ সাগা ইনজেক্টর ব্যবহার করব। থিসিস লাইনের সাথে কিছু মনে করবেন না।


3

পাথগুলি পুনরায় লেখার জন্য আপনি এখন ল্যাম্বদা @ এজ দিয়ে এটি করতে পারেন

এখানে একটি কার্যকারী ল্যাম্বদা @ এজ ফাংশন রয়েছে:

  1. একটি নতুন লাম্বদা ফাংশন তৈরি করুন তবে ফাঁকা ফাংশনের পরিবর্তে প্রাক-বিদ্যমান ব্লুপ্রিন্টগুলির মধ্যে একটি ব্যবহার করুন।
  2. "ক্লাউডফ্রন্ট" অনুসন্ধান করুন এবং অনুসন্ধান ফলাফল থেকে ক্লাউডফ্রন্ট-প্রতিক্রিয়া-জেনারেশন নির্বাচন করুন।
  3. ফাংশনটি তৈরি করার পরে, নীচের সাথে সামগ্রীটি প্রতিস্থাপন করুন। আমাকে নোড রানটাইমটি 10.x এও পরিবর্তন করতে হয়েছিল কারণ লেখার সময় ক্লাউডফ্রন্ট নোড 12 সমর্থন করে না।
'use strict';
exports.handler = (event, context, callback) => {

    // Extract the request from the CloudFront event that is sent to Lambda@Edge 
    var request = event.Records[0].cf.request;

    // Extract the URI from the request
    var olduri = request.uri;

    // Match any '/' that occurs at the end of a URI. Replace it with a default index
    var newuri = olduri.replace(/\/$/, '\/index.html');

    // Log the URI as received by CloudFront and the new URI to be used to fetch from origin
    console.log("Old URI: " + olduri);
    console.log("New URI: " + newuri);

    // Replace the received URI with the URI that includes the index page
    request.uri = newuri;

    return callback(null, request);
};

আপনার ক্লাউডফ্রন্ট আচরণে, আপনি "দর্শকের অনুরোধ" এ ল্যাম্বডা ফাংশনে একটি কল যুক্ত করতে তাদের সম্পাদনা করবেন এখানে চিত্র বর্ণনা লিখুন

সম্পূর্ণ টিউটোরিয়াল: https://aws.amazon.com/blogs/compute/implementing-default-directory-indexes-in-amazon-s3-backed-amazon-cloudfront-origins- using-lambdaedge/


1
আপনার কোড উদাহরণটি কেবল একটি লাইন মিস করেছে:return callback(null, request);
ফেরিমাসন

2

যদি আপনি এখানে এমন সমাধানের সন্ধান করেন যা প্রতিক্রিয়া রাউটার এবং এডাব্লুএস এমপ্লিফাই কনসোলটির সাথে কাজ করে - আপনি ইতিমধ্যে জানেন যে অ্যাপ্লিকেশন কনসোল অ্যাপ্লিকেশনটির জন্য ক্লাউডফ্রন্ট বিতরণ প্রকাশ না করে আপনি সরাসরি ক্লাউডফ্রন্ট পুনর্নির্দেশের নিয়ম ব্যবহার করতে পারবেন না।

সমাধানটি তবে খুব সহজ - আপনার কেবল এম্প্লিফাই কনসোলে একটি পুনর্নির্দেশ / পুনর্লিখনের নিয়ম যুক্ত করতে হবে:

প্রতিক্রিয়া রাউটারের জন্য কনসোল পুনর্লিখনের নিয়মকে প্রশস্ত করুন

আরও তথ্যের জন্য নিম্নলিখিত লিঙ্কগুলি দেখুন (এবং স্ক্রিনশট থেকে অনুলিপি-নিয়ম):


0

আমি নিজেই এর উত্তর খুঁজছিলাম। এস 3 কেবল পুনর্নির্দেশগুলি সমর্থন করে বলে মনে হচ্ছে, আপনি কেবল ইউআরএল পুনর্লিখন করতে পারবেন না এবং নিঃশব্দে কোনও আলাদা উত্স ফিরিয়ে দিতে পারবেন না। আমি প্রয়োজনীয় বিল্ডের সমস্ত অবস্থানগুলিতে আমার সূচক html এর অনুলিপিগুলি তৈরি করতে আমার বিল্ড স্ক্রিপ্টটি ব্যবহার করার বিষয়টি বিবেচনা করছি। সম্ভবত এটি আপনার পক্ষেও কাজ করবে।


2
প্রতিটি পাথের জন্য সূচী ফাইলগুলি তৈরি করা আমার মনকেও অতিক্রম করেছিল তবে উদাহরণস্বরূপ //groups/5/sho এর মতো গতিশীল পাথগুলি পাওয়া শক্ত হবে । আপনি যদি এই প্রশ্নের আমার উত্তরটি দেখতে পান তবে আমি বিশ্বাস করি যে সমস্যাটি বেশিরভাগ ক্ষেত্রেই সমাধান করে। এটি কিছুটা হ্যাক তবে কমপক্ষে এটি কাজ করে।
মার্ক নিউটার

একটি এনজিনেক্স সার্ভারের পিছনে মোতায়েন করা এবং সমস্ত আগত ইউআরএলের জন্য সূচি html ফেরত দেওয়া ভাল। আমি এম্বার অ্যাপ্লিকেশনগুলির হিরকু স্থাপনার সাথে এটি সফলভাবে করেছি।
moha297

-3

কেবল অত্যন্ত সহজ উত্তর দিতে। আপনি যদি এস 3-তে হোস্ট করছেন তবে রাউটারের জন্য হ্যাশ অবস্থানের কৌশলটি ব্যবহার করুন।

এক্সপোর্ট কনট অ্যাপ্রাউটিংডমডুল: মডিউলউইথপ্রোভাইডার্স = রাউটারমোডুল.ফরট (রুট, {ইউজ হ্যাশ: ট্রু, স্ক্রোলপেজেশনস্টোরেশন: 'সক্ষম'});

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