【问题标题】:Why IIS doesn't handle relative path the same way IIS Express does?为什么 IIS 不像 IIS Express 那样处理相对路径?
【发布时间】:2016-05-31 22:49:50
【问题描述】:

当您在 Visual Studio 中使用 IIS Express 测试 Web 应用程序时,您将能够像这样(在 ASPX 文件中)添加对脚本文件的引用:

<head>
    <script src="/Javascript/jquery-2.1.1.min.js" type="text/javascript" charset="utf-8"></script>
</head>

但是,当您在标准 IIS 服务器(使用 Web 部署包)上部署完全相同的应用程序时,您将收到缺少的错误 404,因为浏览器将无法解析 url。

要修复它,我可以简单地从路径中删除斜杠:

<script src="Javascript/jquery-2.1.1.min.js" type="text/javascript" charset="utf-8"></script>

但是,此问题与如何修复链接无关,因为此问题已被多次询问和回答。我想了解的是为什么 IIS Express 能正确处理这些 url 而 IIS Express 却不能?是安全问题(例如:浏览器在您自己的计算机上工作时可以访问您的本地文件,而在远程服务器上则不然)还是设置问题没有在 web 包中导出?

【问题讨论】:

  • 在 IIS 中没有看到您的网络 应用程序 的结构(猜测):您的 应用程序根目录 在 IIS 中是“不同的”。
  • 确实,IIS Express 似乎从根目录运行应用程序,而 IIS 上的 Web 部署默认情况下会在子目录下创建应用程序。在根目录中安装确实可以解决问题,但由于路径是相对的,我希望它是相对于应用程序而不是站点的。
  • 我认为您必须深入研究配置文件,以确保您的测试至少基于等效设置。同时,IIS Express 在很多方面与 IIS 不同,所以我并不感到惊讶。
  • 在这种情况下,它应该是相同的(IIS / express) - 如果您的网站由 ASP.Net 运行/处理,那么 "root" == Asp.net app根。检查您的网络部署设置:文件系统子目录确实/不应该等同于应用程序“子”。或者检查你部署的根目录是否已经是一个应用程序(如果是,不要在那里部署你的新应用程序).​​.....
  • 可能是因为“bindingInformation”属性不同,在 IIS 中:“:[port no]:” IIS Express:“:[port no]:localhost”。我遇到了类似您的问题,并通过将 * 放在 IIS Express 中此标记的第一个和最后一个值来解决它:“:[port no]:*”

标签: asp.net iis web-applications relative-path iis-express


【解决方案1】:

根据您在 cmets 中的回答,我了解到您的 IIS 服务器配置了类似 http://localhost/mysite/Javascript/... 的内容,而您的IIS Express 设置更像是 http://localhost:8888/Javascript/...*

如果真的是这样,区别在于相对 URL以 / 开头意味着它是相对于 url 的主机名部分,而相对 url 没有初始 / 是相对于实际页面文件夹的。

在当前示例中,如果页面是demo.htm

Server Base Page Relative Url Result Url
IIS http://localhost/mysite/demo.htm /Javascript/jquery-2.1.1.min.js http://localhost/Javascript/jquery-2.1.1.min.js
IISExpress http://localhost:8888/demo.htm /Javascript/jquery-2.1.1.min.js http://localhost/Javascript/jquery-2.1.1.min.js
IIS http://localhost/mysite/demo.htm Javascript/jquery-2.1.1.min.js http://localhost/mysite/Javascript/jquery-2.1.1.min.js
IISExpress http://localhost:8888/demo.htm Javascript/jquery-2.1.1.min.js http://localhost/Javascript/jquery-2.1.1.min.js

由于我认为您的 Javascript 文件夹是您网站的一部分,正如您在上表中所见,带有前斜杠的 Url 不会指向正确的 Url。另一方面,使用正斜杠访问根文件夹可以在网站的任何位置使用。

在一个站点上,另一种使两者行为相同的方法是修改项目的 IIS Express 属性(或直接 applicationHost.config 文件),以便它也使用虚拟目录而不是直接映射到根目录。

【讨论】:

    猜你喜欢
    • 2020-02-07
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    • 1970-01-01
    • 2016-08-07
    • 1970-01-01
    • 2020-02-14
    • 1970-01-01
    相关资源
    最近更新 更多