AngularJS routing not working after site hosted into IIS

前端 未结 4 890
暗喜
暗喜 2020-12-18 10:17

We are creating SPA technique using AngularJS in ASP.NET MVC framework,AngularJS routing between pages are working fine when it\'s run from VS2013,but after hosting the appl

相关标签:
4条回答
  • 2020-12-18 10:52

    you have to edit a web.config file to do the rewrite and on the index like this <base href="/myAppNameOnIIS/"> no app name and the refresh will work fine using the web.config file

    <?xml version="1.0" encoding="UTF-8"?>
     <configuration>
    <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" />
                        <add input="{REQUEST_URI}" pattern="^/(api)" negate="true" />
                        <add input="{REQUEST_URI}" matchType="Pattern" pattern="views/(.*)" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="/bidocs/" />
                </rule>    
            </rules>
        </rewrite> 
        <staticContent>
            <mimeMap fileExtension=".json" mimeType="application/json" />
            <mimeMap fileExtension=".woff" mimeType="application/font-woff" />
            <mimeMap fileExtension=".wof2" mimeType="application/font-woff" />          
        </staticContent>
        <handlers>
            <add name="fonts2" path="*.woff2" verb="*" modules="IsapiModule" scriptProcessor="C:\Windows\System32\inetsrv\asp.dll" resourceType="Unspecified" preCondition="bitness64" />
            <add name="fonts" path="*.woff" verb="*" modules="IsapiModule" scriptProcessor="C:\Windows\System32\inetsrv\asp.dll" resourceType="Unspecified" preCondition="bitness64" />          
            <add name="JSON" path="*.json" verb="*" modules="IsapiModule" scriptProcessor="C:\Windows\System32\inetsrv\asp.dll" resourceType="Unspecified" preCondition="bitness64" />
        </handlers>
    </system.webServer>
    

    I fix it using this <action type="Rewrite" url="/myAppNameOnIIS/" /> in order for the HTML5 mode to work. keep in mind that this settings might not work on your localhost server if you are running the application from the root folder

    0 讨论(0)
  • 2020-12-18 10:53

    Are you deploying your solution as a website or as an application on a virtual path? In other words, when you deploy your app what is url? Is it something like "myapp.mydomain.com" or "domain.com/myapp"?

    If the latter, then the problem is that the request for the template { templateUrl: '/home/main' } will go to domain.com/home/main and not to domain.com/myapp/home/main when you expect it.

    According to : Stating directive templateUrl relative to root just remove '/' in the template url and it should work: { templateUrl: 'home/main' }

    The other option is to deploy your website to its own subdomain.

    0 讨论(0)
  • 2020-12-18 10:54

    I just added the <base href="@Url.Content("~/")" /> to my layout page and everything works fine. I had issues reloading(Refresh or F5) the page which sends the entire url to the server with the $locationprovider.html5Mode(true); in the Stateprovider, but the refresh issue solved when i remove it from the stateprovider. and i have the site as an application in a website.

    0 讨论(0)
  • 2020-12-18 11:13

    do you get any JS error when you run it on IIS?

    are you using bundles? If so check if the problem happens because of minification/bundle creation adding BundleTable.EnableOptimizations = true; in RegisterBundles method and trying again in VS.

    Otherwise I suggest you to run on local IIS (right click on project, tab "Web",section "Servers") and see if it works correctly.

    Depending of your routing you should <base href="@Url.Content("~/")" /> in template head and get rid of "#" from url using $locationProvider.html5Mode(true); on route configuration.

    If none of the above are useful please add more details to your request.

    Have a nice day,

    Alberto

    0 讨论(0)
提交回复
热议问题