এইচটিএমএল 5 মোডে অ্যাংুলারজেএস অ্যাপ্লিকেশন পুনরায় লেখার জন্য আইআইএস কনফিগার করব কীভাবে?


140

আমার অ্যাংুলারজেএস বীজ প্রকল্প রয়েছে এবং আমি যুক্ত করেছি

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

app.js ফাইলটিতে আমি সমস্ত অনুরোধে রুট করতে আইআইএস 7 কনফিগার করতে চাই

http://localhost/app/index.html

যাতে এটি আমার পক্ষে কাজ করে। আমি এটা কিভাবে করবো?

হালনাগাদ:

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

আপডেট 2 :

আমি অনুমান করি যে এটি আমি কী অর্জন করতে চাইছি ( অ্যাংুলারজেএস বিকাশকারী ডকুমেন্টেশন থেকে নেওয়া ):

এই মোডটি ব্যবহার করার জন্য সার্ভার সাইডে ইউআরএল পুনর্লিখনের প্রয়োজন হয়, মূলত আপনাকে আপনার অ্যাপ্লিকেশনের এন্ট্রি পয়েন্টে আপনার সমস্ত লিঙ্ক পুনর্লিখন করতে হবে (উদাহরণস্বরূপ index.html)

আপডেট 3:

আমি এখনও এটি নিয়ে কাজ করছি এবং আমি বুঝতে পারি যে কিছু নির্দিষ্ট ইউআরএলগুলিকে পুনর্নির্মাণের (পুনরায় লেখার নিয়ম রয়েছে) দরকার নেই

http://localhost/app/lib/angular/angular.js
http://localhost/app/partials/partial1.html

সুতরাং CSS, js, lib বা পার্টিয়াল ডিরেক্টরিতে থাকা যে কোনও কিছুই পুনর্নির্দেশ করা হয়নি। অন্য সমস্ত কিছু অ্যাপ / সূচক html এ পুনঃনির্দেশ করা প্রয়োজন

যে কোনও একটি প্রতি ফাইলের জন্য কোনও বিধি যুক্ত না করে কীভাবে সহজে এটি অর্জন করবেন জানেন?

আপডেট 4:

আইআইএস ইউআরএল পুনর্লিখনের মডিউলটিতে আমার কাছে 2 ইনবাউন্ড বিধিগুলি সংজ্ঞায়িত করা হয়েছে। প্রথম নিয়মটি হ'ল:

আইআইএস ইউআরএল পুনর্লিখন অভ্যন্তরীণ বিধি 1

দ্বিতীয় নিয়মটি হ'ল:

আইআইএস ইউআরএল পুনর্লিখন অভ্যন্তরীণ বিধি 2

এখন যখন আমি লোকালহোস্ট / অ্যাপ / ভিউ 1 এ নেভিগেট করি এটি পৃষ্ঠাটি লোড করে, তবে সমর্থনকারী ফাইলগুলি (CSS, js, lib এবং পার্টিশিয়াল ডিরেক্টরিগুলির মধ্যে থাকা) অ্যাপ্লিকেশন / সূচক html পৃষ্ঠায় আবারও লেখা হচ্ছে - তাই সবকিছুই আসছে সূচিপত্রের শিরোনাম html পৃষ্ঠা হিসাবে ফিরে আসুন তবে কোনও ইউআরএল ব্যবহার করা হয়নি। আমি অনুমান করি এটির আমার প্রথম নিয়মটির অর্থ, এই URL গুলিকে দ্বিতীয় বিধি দ্বারা প্রক্রিয়াজাতকরণ থেকে বিরত করার কথা, কাজ করছে না .. কোনও ধারণা? ...যে কেউ? ... আমি খুব একা বোধ করি ... :-(


এর জন্য ধন্যবাদ! খুব উপকারী!
অ্যাশ ক্লার্ক 23

দ্বিতীয় নিয়ম গুরুত্বপূর্ণ: আপনি কি নিশ্চিত যে এটি রাউটিং এর করতে হবে app/index.htmlএবং না app/ করার স্পষ্টভাবে যে পৃষ্ঠাটি AngularJS আপ স্থল আরম্ভ। আমি আমার জীবন আবিষ্কারের আগে তার 2 ঘন্টা হারিয়েছি। :-)
ডেক্সটার লেগাস্পি

এএসপি.এনইটি এমভিসি ব্যবহারের এবং রাউটকনফিগ.সিএসগুলিতে যুক্ত করার আরেকটি উপায়: রুটস.ম্যাপরুট (নাম: "ডিফল্ট", ইউআরএল: "{* কিছু}", ডিফল্ট: নতুন {কন্ট্রোলার = "হোম", ক্রিয়া = "সূচক", }); এবং আপনার হোম কন্ট্রোলার সূচক কেবলমাত্র ফাইল ("~ / সূচি-যেহেতুও html", "পাঠ্য / এইচটিএমএল") ফেরায়; তারপরে আপনার অ্যাপ্লিকেশনটি আইআইএস স্বতন্ত্র হয়ে যায়
টুলকিট

আমাকে "ওয়েব ইনস্টলার" থেকে ইউআরএল পুনর্লিখন মডিউল ইনস্টল করতে হয়েছিল "। যদি ইউআরএল পুনর্লিখনের মডিউলটি সেখানে না থাকে, তবে পুনরায় লোড করার সময় পুনর্লিখন কাজ করবে না। ইউআরএল পুনর্লিখন মডিউল ইনস্টল করুন। :)
বিমল দাস

উত্তর:


289

আমি $locationProvider.html5Mode(true)সেট করার পরে ওয়েব কন্টিগিগ এ একটি নিয়ম লিখি app.js

আশা করি, কাউকে সাহায্য করবে।

  <system.webServer>
    <rewrite>
      <rules>
        <rule name="AngularJS Routes" stopProcessing="true">
          <match url=".*" />
          <conditions logicalGrouping="MatchAll">
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
            <add input="{REQUEST_URI}" pattern="^/(api)" negate="true" />
          </conditions>
          <action type="Rewrite" url="/" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>

আমার সূচক html এ আমি এটিতে যুক্ত করেছি <head>

<base href="/">

সার্ভারে আইআইএস ইউআরএল পুনর্লিখন ইনস্টল করতে ভুলবেন না ।

এছাড়াও আপনি যদি ওয়েব এপিআই এবং আইআইএস ব্যবহার করেন তবে আপনার এপিআই www.yourdomain.com/apiতৃতীয় ইনপুট (শর্তের তৃতীয় লাইন) এর কারণে থাকলে এটি কাজ করবে ।


2
এটি খুব দরকারী ছিল এবং আমি এটি সবচেয়ে সম্পূর্ণ বলে মনে করেছি। ধন্যবাদ!
মারিও

2
এটি @ মারিওকে সহায়তা করে
ইয়াগিজ ওজটুর্ক

5
পারফেক্ট! এটি আমার জন্য একটি কঠিন সমস্যা ছিল, এটিতে কাজ করার জন্য কয়েক ঘন্টা সময় ব্যয় করেছিল। ধন্যবাদ! যে কোনও একটিতে পরামর্শ দিন: আমি << টাইম = "পুনর্লিখন" "url" /index.html "/> এ সূচক html যুক্ত করেছি তারপর আমার সূচিপত্রের html (কৌণিক এসপিএর জন্য মূল ডিরেক্টরি ফাইল, <বেস href =" / সূচক .html "/> যখন আমি উপরের কোডটি অনুলিপি করেছি তখন এটি আমার <বেস href /> এর সাথে মেলে না তাই এটি সঠিকভাবে কাজ করে না" "/ (এপিআই)" প্যাটার্নের জন্যও বিশাল প্রপসগুলি, আমি সেই অংশটিতে হোঁচট খাইতে থাকি।
ব্র্যাড মার্টিন

আমি যদি আজুর ওয়েব সাইটে হোস্ট করি?
টুলকিট

7
এটি একটি রসিকতা যে কৌণিক রাউটিংয়ের জন্য আমাদের এই হুপগুলির মধ্য দিয়ে ঝাঁপিয়ে পড়তে হবে। এটি আমার জন্য কৌনিক রাউটিংটিকে হত্যা করে। কী এলোমেলো.
ব্যবহারকারী 441521

38

আইও আইটি অভ্যন্তরীণ বিধিগুলি ডিও কাজ করে প্রশ্নে প্রদর্শিত হয়েছে। আমাকে ব্রাউজারের ক্যাশেটি সাফ করতে এবং <head>সূচিপত্রের আমার বিভাগের শীর্ষে নীচের লাইনটি যুক্ত করতে হয়েছিল HTML পৃষ্ঠা:

<base href="/myApplication/app/" />

এটি কারণ হ'ল লোকালহোস্টে আমার একাধিক আবেদন রয়েছে এবং তাই অন্যান্য পার্টিয়ালের কাছে অনুরোধগুলি localhost/app/view1পরিবর্তে নেওয়া হচ্ছেlocalhost/myApplication/app/view1

আশা করি এটি কাউকে সাহায্য করবে!


1
আমার এটির দরকার ছিল না, তবে প্রশ্নগুলির সম্পাদনাগুলি দুর্দান্ত ছিল। ধন্যবাদ!
অ্যাশ ক্লার্ক 23

2
এছাড়াও এটি দরকারী হতে পারে। পৃষ্ঠাটি পুনরায় লোড করার সময় আমার জন্য কাজ করেছিল। প্রতিটি ফাইলের জন্য কোনও বিশেষ বিধিবিধান ছাড়াই: coderwall.com/p/mycbiq
Per G

@ অ্যাশ-ক্লার্ক যেমন বলেছিল, এটি প্রয়োজনীয় নয় তবে এটি ভাল অনুশীলন কারণ এটি পৃষ্ঠার লিঙ্কগুলিকে অ্যাডনস্টিক হতে দেয় যা এটি "সাব-ডিরেক্টরী" এর সাথে সম্পর্কিত।
ডেক্সটার লেগাস্পি

@PerG আমি উপরের সমাধান পরিশ্রমী গাড়ীতে আঘাত কিন্তু পুনঃলোডে, এখানে আমার কোড হল: stackoverflow.com/questions/25644287/iis-url-rewrite-rules কোন ধারণা?
amcdnl

আমি নির্দিষ্ট কলগুলিকে ফিল্টার আউট করার জন্য জানি না বা চেষ্টা করেছি। প্রায় একটি উপায় অন্যান্য ডোমেন ইত্যাদির এপিআই থাকা ইত্যাদি But তবে সম্ভবত এটি আপনার সমাধান নয়। তবে আপনি উপরের আমার লিঙ্কে জিজ্ঞাসা চালিয়ে যেতে পারেন। এবং হয়ত লেখক আপনাকে উত্তর দিতে পারে?
প্রতি

11

আমার ক্ষেত্রে আমি পুনর্লিখনের সঠিক নিয়মগুলি সেটআপ করার পরে 403.14 পেয়ে যাচ্ছি। দেখা যাচ্ছে যে আমার কাছে একটি ডিরেক্টরি ছিল যা আমার ইউআরএল রুটের অন্যতম নাম ছিল। আমি একবার ইসডিরেক্টরি পুনর্লিখনের নিয়ম সরালে আমার রুটগুলি সঠিকভাবে কাজ করেছিল। ডিরেক্টরি নেইগেইশন অপসারণ করার ফলে সমস্যা হতে পারে এমন কোনও মামলা আছে? আমি আমার ক্ষেত্রে কোনটা ভাবতে পারি না। কেবলমাত্র আমি ভাবতে পারি যদি আপনি নিজের অ্যাপ্লিকেশন দিয়ে কোনও ডিরেক্টরি ব্রাউজ করতে পারেন।

<rule name="fixhtml5mode" stopProcessing="true">
  <match url=".*"/>
  <conditions logicalGrouping="MatchAll">
    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
  </conditions>
  <action type="Rewrite" url="/" />
</rule>

10

শুধুমাত্র এই দুটি শর্ত থাকা নিয়ে সমস্যা:

  <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
  <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />

এটি হ'ল যতক্ষণ না তারা {REQUEST_FILENAME} ডিস্কে শারীরিকভাবে বিদ্যমান থাকে ততক্ষণ কাজ করে । এর অর্থ হ'ল এমন পরিস্থিতি থাকতে পারে যেখানে ভুল নামকরণের আংশিক দর্শনের জন্য অনুরোধটি 404 এর পরিবর্তে মূল পৃষ্ঠাটি ফিরিয়ে আনবে যার ফলে কৌণিক দ্বিগুণ লোড হয় (এবং নির্দিষ্ট পরিস্থিতিতে এটি কোনও বাজে অসীম লুপ সৃষ্টি করতে পারে)।

সুতরাং, সমস্যাগুলি সমাধানের জন্য এগুলি এড়াতে কিছু নিরাপদ "ফ্যালব্যাক" বিধিগুলির পরামর্শ দেওয়া হবে:

  <add input="{REQUEST_FILENAME}" pattern="(.*?)\.html$" negate="true" />
  <add input="{REQUEST_FILENAME}" pattern="(.*?)\.js$" negate="true" />
  <add input="{REQUEST_FILENAME}" pattern="(.*?)\.css$" negate="true" />

বা এমন একটি শর্ত যা শেষ হওয়া কোনও ফাইলের সাথে মেলে :

<conditions>
  <!-- ... -->
  <add input="{REQUEST_FILENAME}" pattern=".*\.[\d\w]+$" negate="true" />
</conditions>

1
এই সমস্ত জায়গায় আমার সাইটটি ঠিক জরিমানা করে, তবে আমি যদি রুট ধরে কোনও পথে আছি তবে আমার সমস্যা আছে। সুতরাং, যদি আমার ব্রাউজারে পথটি হয়: 10.34.34.46/jbvdev/documents/BC498484 প্রাথমিকভাবে এটি ভাল দেখায়, তবে আমি যদি রিফ্রেশ করি তবে সমস্ত কিছু ভেঙে যায় কারণ এটি 10.34.34.46/jbvdev/documents এ CSS এবং js সন্ধান শুরু করে / সিএসএস বা 10.34.34.46/jbvdev/documents/js কেউ কীভাবে এটি সমাধান করতে জানেন?
মাইকেল মাহনি

1

আমি খুঁজে পাওয়া সবচেয়ে সহজ উপায় হ'ল ক্লায়েন্টের কাছে 404 টি ট্রিগার করা অনুরোধগুলি পুনর্নির্দেশ করা। এটি $locationProvider.html5Mode(true)সেট হওয়ার পরেও হ্যাশট্যাগ যুক্ত করে এটি করা হয় ।

এই কৌশলটি একই ওয়েব সাইটে আরও ওয়েব অ্যাপ্লিকেশন সহ পরিবেশের জন্য এবং ইউআরএল অখণ্ডতার সীমাবদ্ধতার প্রয়োজন (EG বাহ্যিক প্রমাণীকরণ)। কীভাবে করবেন তা এখানে ধাপে ধাপে

index.html

<base>উপাদানটি সঠিকভাবে সেট করুন

<base href="@(Request.ApplicationPath + "/")">

web.config

প্রথমে 404 টি একটি কাস্টম পৃষ্ঠায় পুনঃনির্দেশ করুন, উদাহরণস্বরূপ "হোম / ত্রুটি"

<system.web>
    <customErrors mode="On">
        <error statusCode="404" redirect="~/Home/Error" />
    </customErrors>
</system.web>

হোম নিয়ামক

ActionResultকোনও ক্লায়েন্টসাইড রুটে একটি সহজ "অনুবাদ" ইনপুট প্রয়োগ করুন।

public ActionResult Error(string aspxerrorpath) {
    return this.Redirect("~/#/" + aspxerrorpath);
}

এটি সহজতম উপায়।


ইউআরএল বৈধ হবে কেবল তখনই ক্লায়েন্টকে 404 পুনর্নির্দেশ করার জন্য কিছু উন্নত যুক্তির সাথে ত্রুটি ফাংশনটি বাড়ানো সম্ভব (পরামর্শদায়ক?) এবং ক্লায়েন্টে কিছুই পাওয়া যাবে না তখন সাধারণত 404 টি ট্রিগার করুন। ধরা যাক আপনার এই কৌণিক পথ রয়েছে

.when("/", {
    templateUrl: "Base/Home",
    controller: "controllerHome"
})
.when("/New", {
    templateUrl: "Base/New",
    controller: "controllerNew"
})
.when("/Show/:title", {
    templateUrl: "Base/Show",
    controller: "controllerShow"
})

এটি যখন "/ নতুন" বা "/ শো /" দিয়ে শুরু হয় কেবল তখনই ক্লায়েন্টের কাছে ইউআরএল পুনর্নির্দেশ করা অর্থবোধ করে

public ActionResult Error(string aspxerrorpath) {
    // get clientside route path
    string clientPath = aspxerrorpath.Substring(Request.ApplicationPath.Length);

    // create a set of valid clientside path
    string[] validPaths = { "/New", "/Show/" };

    // check if clientPath is valid and redirect properly
    foreach (string validPath in validPaths) {
        if (clientPath.StartsWith(validPath)) {
            return this.Redirect("~/#/" + clientPath);
        }
    }

    return new HttpNotFoundResult();
}

এটি কেবল উন্নত যুক্তির উদাহরণ, অবশ্যই প্রতিটি ওয়েব অ্যাপ্লিকেশনটির বিভিন্ন প্রয়োজন হয়


1

আমি একটি অ্যাজুরে ওয়েব অ্যাপে একটি সাধারণ কৌণিক 7 অ্যাপ্লিকেশন স্থাপন করার চেষ্টা করছি। আপনি পৃষ্ঠাটি রিফ্রেশ করার সময় পর্যন্ত সবকিছু ঠিকঠাক কাজ করেছিল। এটি করা, আমাকে 500 ত্রুটিযুক্ত স্থানান্তরিত সামগ্রী দিয়ে উপস্থাপন করছিল। আমি উভয়টি কৌনিক ডক্সে এবং বেশ কয়েকটি ভাল ফোরামে পড়েছি যে আমার আমার নিযুক্ত সমাধানে একটি ওয়েবকনফিগ ফাইল যুক্ত করা দরকার এবং সূচিপত্র HTML ফাইলটিতে পুনর্লিখনের নিয়ম ফ্যালব্যাক নিশ্চিত করা উচিত। কয়েক ঘন্টা হতাশা এবং পরীক্ষার পরে এবং ত্রুটি পরীক্ষার পরে, আমি খুঁজে পেয়েছি ত্রুটিটি বেশ সহজ ছিল: আমার ফাইল মার্কআপের চারপাশে একটি ট্যাগ যুক্ত করা।


1

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

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

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

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <httpErrors errorMode="Custom">
      <remove statusCode="404"/>
      <error statusCode="404" path="/index.html" responseMode="ExecuteURL"/>
    </httpErrors>
  </system.webServer>
</configuration>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.