AngularJS routing not working after site hosted into IIS

馋奶兔 提交于 2019-11-29 07:43:37

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

milanio

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.

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

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.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!