首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何配置IIS以便在HTML5模式下重写AngularJS应用程序?

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

Stack Overflow用户
提问于 2012-09-27 12:24:43
回答 8查看 138.8K关注 0票数 145

我有AngularJS seed project,并且我添加了

代码语言:javascript
复制
$locationProvider.html5Mode(true).hashPrefix('!');

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

代码语言:javascript
复制
http://localhost/app/index.html

所以这对我来说是有效的。我该怎么做呢?

更新:

我刚刚发现、下载并安装了IIS URL Rewrite module,希望这能让我的目标变得简单明了。

更新2

我想这总结了我试图实现的目标(摘自AngularJS Developer documentation):

使用此模式的

需要在服务器端重写URL,基本上您必须重写指向应用程序入口点的所有链接(例如index.html)。

更新3:

我仍然在做这个工作,我意识到我不需要重定向(有规则重写)某些URL,比如

代码语言:javascript
复制
http://localhost/app/lib/angular/angular.js
http://localhost/app/partials/partial1.html

所以css、js、lib或partials目录中的任何内容都不会被重定向。其他所有内容都需要重定向到app/index.html

有谁知道如何轻松实现这一点,而不必为每个文件添加规则?

更新4:

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

第二条规则是:

现在,当我导航到localhost/app/view1时,它会加载页面,但是支持文件(在css、js、lib和partials目录中的文件)也会被重写到app/index.html页面中-所以无论使用什么URL,一切都会以index.html页面的形式返回。我猜这意味着我的第一条规则,即防止这些URL被第二条规则处理的规则,不起作用。有什么想法吗?...anyone?...I感觉很孤单...:-(

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2012-10-25 08:09:48

问题中所示的IIS入站规则可以正常工作。我必须清除浏览器缓存,并在index.html页面的<head>部分的顶部添加以下行:

代码语言:javascript
复制
<base href="/myApplication/app/" />

这是因为我在本地主机中有多个应用程序,因此对其他部分的请求被发送到localhost/app/view1而不是localhost/myApplication/app/view1

希望这对某些人有帮助!

票数 40
EN

Stack Overflow用户

发布于 2014-10-02 06:57:40

在web.config中设置了$locationProvider.html5Mode(true)之后,我在app.js中写出了一条规则。

希望,帮助某人摆脱困境。

代码语言:javascript
复制
  <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>

代码语言:javascript
复制
<base href="/">

别忘了在服务器上安装IIS URL Rewrite

此外,如果您使用Web API和IIS,则由于第三个输入(条件的第三行),如果您的API为www.yourdomain.com/api,则此方法将起作用。

票数 301
EN

Stack Overflow用户

发布于 2015-11-26 04:13:34

只有这两个条件的问题:

代码语言:javascript
复制
  <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
  <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />

它们只能在{REQUEST_FILENAME} exists physically on disk的时间内工作。这意味着在某些情况下,对命名错误的部分视图的请求将返回根页面,而不是404,这将导致angular被加载两次(在某些情况下,它可能会导致令人讨厌的无限循环)。

因此,建议使用一些安全的“回退”规则来避免这些难以解决的问题:

代码语言:javascript
复制
  <add input="{REQUEST_FILENAME}" pattern="(.*?)\.html$" negate="true" />
  <add input="{REQUEST_FILENAME}" pattern="(.*?)\.js$" negate="true" />
  <add input="{REQUEST_FILENAME}" pattern="(.*?)\.css$" negate="true" />

或者是matches any file ending

代码语言:javascript
复制
<conditions>
  <!-- ... -->
  <add input="{REQUEST_FILENAME}" pattern=".*\.[\d\w]+$" negate="true" />
</conditions>
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12614072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档