angularjs - सर्वर रूट रिश्तेदार के बजाय एचटीएम 5 5 एमोड एप्लिकेशन को रूट रिश्तेदार कैसे प्राप्त करें




iis url-rewriting (2)

आधार बदलने के बजाय, आप $ locationProvider का उपयोग कर सकते हैं

$locationProvider.html5Mode({
  enabled: true,
  requireBase: false
});

यह आपको मदद करनी चाहिए

एसईओ और डीप लिंकिंग के साथ मदद करने के लिए, मैंने इस तरह की मेरी कोणीय प्रोजेक्ट में एचटीएमएल 5 मोड चालू किया:

index.html

<base href="/webapplicationname/">

app.js

  // use the HTML5 History API
  $locationProvider.html5Mode(true);

web.config

  <system.webServer>
    <rewrite>
      <rules>
        <rule name="Main Rule" stopProcessing="true">
          <match url=".*" />
          <conditions logicalGrouping="MatchAll">
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
          </conditions>
          <action type="Rewrite" url="/webapplicationname/" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>

मेरा आईआईएस एक्सप्रेस डीबगिंग रूट है http://localhost:10223 और मेरा स्थानीय dev रूट है http://myvirtualmachine/webapplicationname

/webapplicationname/ मेरे डिबगिंग सेट अप में मौजूद नहीं है न ही यह अन्य वातावरणों में मौजूद है जो पिछले देव में मौजूद है लेकिन मुझे यह सौंप दिया गया है कि किसी भी वातावरण को जड़ से बंद किया जा सकता है या वेब एप्लिकेशन फ़ोल्डर में एक नाम के साथ मैं नियंत्रण नहीं करता, इसलिए मैं उस पर भरोसा नहीं कर सकता या न ही एक पैटर्न बना सकता हूं

मैं बस उपयोग / मेरे base रूप में करना चाहता हूँ अगर मैंने किया, तो यह डीबगिंग में काम करेगा। वेब सर्वर रूट के सापेक्ष जहां वेब अनुप्रयोग रहता है, इसके बावजूद मुझे अन्य वातावरण में यह काम करना है।

जैसा कि यह खड़ा होता है, यदि मैं रूट को / बदलता हूं, जैसा कि <action type="Rewrite" url="/" /> और <base href="/"> , / मेरे स्थानीय देव परिवेश में गलत स्थान को इंगित करता है। यह http://myvirtualmachine/ http://myvirtualmachine/webapplicationname करेगा, जिसके कारण 404 का कारण होगा यह मेरे ऐप की जड़ को इंगित करने की आवश्यकता है, न कि वेब सर्वर की जड़!

मैं यहां कैसे ~/ -like कार्यक्षमता प्राप्त कर सकता हूं?


यह है कि मैंने यह काम करने के लिए किया। अगर किसी के पास क्लीनर का रास्ता है, तो कृपया मुझे बताएं

मैंने रबी के लिए कहा था, क्योंकि मुझे लगता है कि अगर आप गतिशील रूप से बेस का निर्माण कर रहे हैं, तो requireBase लिए बंद कर दिया।

  $locationProvider.html5Mode({
    enabled: true,
    requireBase: false
  });

<base href="WhateverTheApplicationRootIs" /> बजाय, मैंने इसे html head तत्व में एक स्थान पर किया था:

  <script type="text/javascript">
    var firstPathPart = document.location.pathname.split("/")[1];
    var href;
    switch (firstPathPart) {
      case '':
      case 'login':
      case 'forgot-password':
      case 'activation':
      case 'home':
      case 'mymainmenu1':
      case 'mymainmenu2':
      case 'profile':
        href = '/';
        break;
      default:
        href = '/' + firstPathPart + '/';
    };
    document.write("<base href='" + href + "' />");
  </script>

जो मूल रूप से गतिशील लिखते हैं आधार लिखते हैं। यूआरएल पथ के पहले सेगमेंट को इंगित करने के लिए आधार लिखिए, सिवाय इसके कि वह मेरे शीर्ष स्तर का कोणीय पथ होने का कारण बनता है, जिसके मामले में रूट /

Web.config में, मैंने /webapplicationname/ के संदर्भ को छोड़ दिया है इसकी हमारी दुकान में अनुमति है, क्योंकि वेब। web.config को किसी भी तरह से पर्यावरण माना जाता है। इसलिए इसे पर्यावरण से भिन्न होने की अनुमति दी जाती है और प्रबंधित किए जाने वाले अलग-अलग सेटिंग्स

मैंने ऐसा क्यों किया? क्योंकि अलग-अलग वातावरण में आधार अलग होने के कारण हमारी दुकान में स्वीकार्य नहीं है। index.html स्रोत कोड है, विन्यास नहीं है स्रोत कोड को हर वातावरण में होना चाहिए, हालांकि वेब। कॉन्फ़िग जैसी सेटिंग्स फ़ाइलों को अलग-अलग करने की अनुमति है।





url-rewriting