4

现在,我遇到了麻烦。首先我有一个页面,我们称之为“http://blah.com/login”。

这显然是“index.asp”

Main.asp 一行:

<!--#include file="resource/menu.asp"-->

页面顶部包括我的菜单所需的所有内容......所以:

资源/menu.htm 的一部分:

<div id="colortab" class="ddcolortabs">
<ul>
<li><a href="main.asp" title="Main" rel="dropmain"><span>Main</span></a></li>

...

</ul>
</div>
<!--Main drop down menu -->
<div id="dropmain" class="dropmenudiv_a">
<a href="main/announcements.asp">Announcements</a>
<a href="main/contacts.asp">Contact Information</a>
<a href="main/MeetingPlans.asp">Meeting Plan</a>
<a href="main/photos.asp">Photo Gallery</a>
<a href="main/events.asp">Upcoming Events</a>
</div>

假设我点击“公告”(http://blah.com/login/main/announcements.asp)链接......现在我在公告页面!但是等等,我包含了相同的菜单文件。猜猜会发生什么:我被发送到“http://blah.com/login/main/main/announcements.asp 哪个不存在...

我的解决方案:为任何子页面创建一个 menu_sub.asp 包含。但是等一下……这可以工作,但它真的很乱……我该怎么做才能只使用一个主要的“menu.asp”而不是“menu_sub.asp”?使用“/main/announcements.asp”不是一个选项,因为这是一个 Web 应用程序,它将位于每个服务器的不同目录中。

4

5 回答 5

3

将此函数添加到您的 menu.asp:

    Function GetApplicationPath()
        GetApplicationPath = Mid(Request.ServerVariables("APPL_MD_PATH"), Len(Request.ServerVariables("INSTANCE_META_PATH")) + 6) & "/"
    End Function

    Dim prefix: prefix = GetApplicationPath()

现在使用以下结构在 menu.asp 中构建您的引用:

<a href="<%=prefix%>main/announcements.asp">Announcements</a>  

这将使这些引用成为绝对引用,但它们会随着网站安装了您的 ASP 应用程序的任何虚拟文件夹路径而适当变化。

于 2012-04-15T17:24:54.790 回答
3

没有灵丹妙药修复。这是我将如何做到这一点。

  1. 创建一个单独的包含文件,该文件包含 DIM 并初始化名为 info.asp 的全局变量
  2. 在 info.asp 中 DIM 一个名为 strRelativePath 的变量并将其初始化为 ""
  3. 在 menu.asp 上方的每个 asp 页面的顶部包含 info.asp 包含
  4. 修改 menu.asp 并在所有 url 中包含 <%=strRelativePath%>
  5. 在每个 asp 页面中根据需要设置 strRelativePath:

<!--#include file="includes/info.asp"-->
strRelativePath = "Login/"
<!--#include file="resource/menu.asp"-->
于 2012-04-16T14:13:52.590 回答
1

这里有一个类似的问题,其中评分最高的答案表明您可以使用以下函数找到根:

Function ToRootedVirtual(relativePath)
    Dim applicationMetaPath : applicationMetaPath = Request.ServerVariables("APPL_MD_PATH")
    Dim instanceMetaPath : instanceMetaPath = Request.ServerVariables("INSTANCE_META_PATH")
    Dim rootPath : rootPath = Mid(applicationMetaPath, Len(instanceMetaPath) + Len("/ROOT/"))
    ToRootedVirtual = rootPath + relativePath
End Function

然后你可以调用它:

ToRootedVirtual("/")

或者

ToRootedVirtual("/index.asp")

等从服务器返回根。

于 2013-07-28T09:15:59.733 回答
0

您可以使用Virtual而不是File因为Virtual接受来自根目录的绝对路径,而不是相对的File.

像这样:

  <!--#INCLUDE VIRTUAL="/resource/menu.asp"-->

此外,请确保您的 IIS 设置允许包含,有关详细信息,请参阅此链接:http: //tech.mikeal.com/blog1.php/server-side-includes-for-html-in-iis7

于 2012-04-15T06:43:46.637 回答
0

这可以通过 HTML 基本标记来修复:

在每一页的开头添加这个标签:

<base href="http://blah.com/login">
于 2013-03-10T18:23:49.060 回答