IIS网站文件夹中的AngularJS / Web API应用程序问题

时间:2014-10-23 17:02:34

标签: angularjs iis

这是我的问题。我有一个Angular / WebAPI项目在IIS 8的域的子文件夹中托管。当我在文件夹名称后面使用尾部斜杠访问该站点时,一切正常。但是,如果我放弃尾随斜线,当Angular添加'#/'对于这条路线,它会破裂。

Example: http://www.domain.com/folder/ becomes http://www.domain.com/folder/#/ <- OK
         http://www.domain.com/folder becomes http://www.domain.com/folder#/ < - Breaks

我开始使用的AngularJS模板没有此问题。我不明白是什么导致了这个问题,我不知道如何继续。

项目的其他信息 我正在使用MVC Bundles来最小化javascript和css 我在同一个项目中有WebAPI控制器 我在同一个项目中使用Microsoft OWIN进行身份验证 除了这个初始URL问题,项目正确运行。 我无法在Visual Studio中重现此问题,但VS不在文件夹中运行。 如果需要,我可以发布Angular路线。

1 个答案:

答案 0 :(得分:0)

这是关于相对路径如何在HTML中起作用而不是Angular特有的问题。这是在真正存在虚拟URL概念之前,URL和相关链接的原始规范的结果。

HTML页面上的相对链接来自HTML&#34; doc&#34;本身。因此,如果网址是:

http://domain.com/folder/

然后,您的浏览器将相对URL固定在

http://domain.com/folder/[relativePathHere] 

浏览器假设它正在查看该文件夹中的默认文档(index.html,home.htm等) - 最初是该目录中文件的索引。但是,如果没有斜杠,浏览器会认为&#34; / folder&#34;实际上是一个名为&#34;文件夹&#34;它位于服务器的根doc目录中(因为它无法区分 - 它不关心是否存在文件扩展名)。因此,所有相对路径都锚定在

http://domain.com/[relativePathHere]

这就是为什么你在没有尾随斜线的情况下遇到相对路径问题的原因。要更正此问题,您需要在IIS中放置重写规则。这样,在传递默认HTML文件之前,您将立即重定向到具有尾部斜杠的版本。这是一件非常普遍的事情(不仅仅是针对这种情况 - 它对搜索引擎优化也很重要,因此抓取者不会认为有两个不同的页面。)

查看以下链接中的提示#1:http://ruslany.net/2009/04/10-url-rewriting-tips-and-tricks/

按照添加尾部斜杠的说明进行操作,您应该进行设置。