在IIS上托管Angular2应用程序后,直接url不起作用

在IIS上托管Angular2应用程序后,直接url不起作用,angular,iis-7.5,angular2-routing,angular-cli,Angular,Iis 7.5,Angular2 Routing,Angular Cli,我们开发了Angular2应用程序 当我们在带有“ng serve”的angular cli下运行时,它工作正常 一旦我们将应用程序托管到IIS 7.5,我们就可以浏览到应用程序的根目录,而不会出现太多问题,并且我们可以导航到应用程序导航创建的任何其他视图 但当用户试图加载指向特定路由或组件的url时,问题就开始了 所以如果我们转到。。。它加载index.html,然后单击index.html上的导航链接,用户将进入 但当用户试图通过在浏览器地址栏中键入直接转到url时,它正在将该请求发送到II

我们开发了Angular2应用程序

当我们在带有“ng serve”的angular cli下运行时,它工作正常

一旦我们将应用程序托管到IIS 7.5,我们就可以浏览到应用程序的根目录,而不会出现太多问题,并且我们可以导航到应用程序导航创建的任何其他视图

但当用户试图加载指向特定路由或组件的url时,问题就开始了

所以如果我们转到。。。它加载index.html,然后单击index.html上的导航链接,用户将进入

但当用户试图通过在浏览器地址栏中键入直接转到url时,它正在将该请求发送到IIS,并返回错误,但未找到资源

而且很容易理解,服务器上不存在url。这是有角度的url。理想情况下,它应该加载index.html,并将url的其余部分传递给angular router,然后加载/route1/component1。这适用于“ng serve”,但不适用于IIS 7.5。我需要在IIS中进行任何设置才能使其正常工作吗?或者在Anuglar2应用程序中我必须做的任何事情


有谁能建议我如何修复这个问题吗?

我通过执行以下步骤来解决这个问题

  • 从下载的URL重写器模块

  • 在my web.config中添加了以下内容


  • 使用Angular 4.0和IIS 6.1,对我进行了更简单的更改。这允许我使用命名站点,而不是默认文件夹或上面的重写。我刚刚将基本href从“/”更改为我的应用程序文件夹的名称:

    <head>
        <base href="MyApp">
    ...
    
    
    ...
    
    希望这对其他人有用

    [windows托管] 创建文本文件并将其命名为“web.config” 打开它,并通过下面的内容,然后确保它是在您的托管根目录

    <?xml version="1.0" encoding="utf-8"?>
          <configuration>
    
          <system.webServer>
            <rewrite>
              <rules>
                <rule name="Angular Routes" 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="./index.html" />
                </rule>
              </rules>
            </rewrite>
          </system.webServer>
    
          </configuration>
    
    
    

    祝你好运:)当我为别人节省时间时,这是值得的

    使用
    URL Rewrite
    模块编写规则,重定向某个URL下的所有内容,以使用该URL的内容。我尝试了许多不同的方法,这是迄今为止我见过的最干净、最好的方法。谢谢你!如果您有一个现有的MVC站点,并且您希望所有Angular2代码都在其下,但您希望=MVCCan任何人都能验证这在IIS8中是否有效,该怎么办?我们可以在IIS7.5中使用,但不能在IIS8中使用。在IIS8中,只要你不尝试使用保存的url,网站就可以正常工作。没关系。我发现这是@angular的问题/router@3.4.9所以我降级到3.4.3来修复它。对我有用,谢谢!但是我已经安装了URL重写模块。当我添加重写规则时,它不起作用。我需要转到“程序和功能”,找到“IIS URL重写模块2”,然后调用此模块的修复。现在它开始工作了!在我的例子中,我必须使用索引,而不是像其他解决方案所建议的那样只使用“/”。