如何配置IIS以重写HTML5模式下的AngularJS应用程序?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (104)

我添加了

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

到app.js文件。我想配置IIS 7将所有请求路由到

http://localhost/app/index.html 我该怎么做呢?

我刚刚发现,下载并安装了IIS URL重写模块,希望这可以让我轻松明白地实现自己的目地

我想这总结了我试图达到的目标(从AngularJS开发者文档中获得):

使用这种模式需要在服务器端重写URL,基本上你必须重写你的应用程序入口点的所有链接(例如index.html)

过了段时间我仍然在研究这个问题,并且我意识到我不需要重定向(有重写规则)的某些URL,比如

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

所以在css,js,lib或partials目录中的任何东西都不会被重定向。其他一切都需要重定向到app / index.html

任何人都知道如何轻松实现这一点,而无需为每个文件添加规则?

我有2个入站规则在IIS URL重写模块中定义。第一条规则是:

第二条规则是:

现在,当我导航到localhost / app / view1时,它会加载页面,但是支持文件(css,js,lib和partials目录中的文件)也将被重写到app / index.html页面 - 所以一切都会到来无论使用哪个网址,都会返回index.html页面。我想这意味着我的第一条规则,这应该是防止这些URL被第二条规则处理。

提问于
用户回答回答于

必须清除浏览器缓存并在index.html页面的顶部添加以下行:

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

这是因为我在本地主机上有多个应用程序,所以对其他部分的请求正在localhost/app/view1取而代之localhost/myApplication/app/view1

用户回答回答于

我写了在web.config中后的规则$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>

在我的index.html中添加了这个 <head>

<base href="/">

不要忘记在服务器上安装IIS URL重写。

此外,如果使用Web API和IIS,那么如果API www.yourdomain.com/api因第三个输入(第三行条件)而处于工作状态,则这将起作用。

扫码关注云+社区

领取腾讯云代金券