【发布时间】:2014-08-11 20:33:51
【问题描述】:
我在 Windows Server 2012、IIS 8.5、.NET 4.0 上托管了一个 Orchard 1.6 站点。
我需要在我的 Orchard 菜单中添加指向网络托管文件的链接,可以从我的网络服务器访问网络共享 - 目标文件本身位于 不同 服务器。我在自定义链接菜单 URL 中输入了file://path/to/network/file,但站点的基本 URL 总是被添加到链接之前。
例如,如果我的基本 URL 是 http://example.com,则链接变为 http://example.com/file://path/to/network/file,然后 .NET 不喜欢路径中的第二个 : - 最重要的是它是不正确的链接。正斜杠、反斜杠或其他符号的组合都不会阻止前置的基本 URL。
为了增加另一个问题,相同的 URL 方案在稍微不同的设置下也能正常工作:Orchard 1.6、Windows Server 2008、IIS 7.0、.NET 4.0;网络服务器和目标网络 URL 在相同服务器上。
有没有办法强制 Orchard 使用给定的 URL,而根本不改变它?或者,构造最终链接的代码在哪里?
使用“HTML 菜单项”而不是“自定义链接”来插入原始 HTML 作为链接确实有效,但这似乎是一种非常笨拙的解决方法;我必须为几十个链接执行此操作,以后不一定会更改它们。
我查看了 Orchard 设置和 IIS 设置;也没有关于重写链接的任何内容。更改 Orchard 上的基本 URL 以匹配预期的目标服务器不起作用(并且长期不可接受)。我也尝试过托管一个临时本地文件 (c:\temp\test.txt),但我什至无法在新设置中生成正确的 file:// 目标。
升级到最新的 Orchard (1.8.x) 不是一个可行的解决方案(如果这最终成为一个可能的解决方案)。
编辑:
我应该澄清一下,这两个站点都在 Intranet 上;我知道与file:// 链接相关的安全隐患,以及让各种浏览器正确加载它们的问题,但我想先让链接生成工作。
编辑:问题来源
我弄清楚了为什么我自己的站点之间的链接处理不一致 - 我在第一个站点中编写了一小段 Javascript,以去除它遇到的任何 file:// 链接的应用程序的基本 URL。我忘记了它在那里并且硬编码以仅删除某个基本 URL,因此当我将站点移动到不同的主机名时,它坏了。
所以,Orchard 没有不一致,只是我自己的记忆错误。
【问题讨论】:
-
我猜 Orchard 自定义链接仅用于站点内导航。因此 Orchard 附加了网站的基本 url。我认为对于外部链接,您必须使用原始 HTML 链接,或扩展导航以允许使用
Url.Absolute -
根据我所见,我同意,但
file://在一个实例中有效,而http://始终有效。我真的很困惑是什么导致前者在一个站点上工作而不是另一个。