有没有更简单的方法来做经典ASP“相对路径”?

时间:2012-04-15 02:07:52

标签: asp-classic

现在,我遇到了麻烦。 首先,我有一个页面,我们称之为“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应用程序,它将位于每个服务器的不同目录上。

5 个答案:

答案 0 :(得分: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应用程序的虚拟文件夹路径而有所不同。

答案 1 :(得分:2)

没有灵丹妙药。我就是这样做的。

  1. 创建一个单独的包含文件,DIM和初始化全局变量名为info.asp
  2. 在info.asp内部DIM一个名为strRelativePath的变量,并将其初始化为“”
  3. 在menu.asp include
  4. 上方的每个asp页面的顶部包含info.asp
  5. 修改menu.asp并包含&lt;%= strRelativePath%&gt;在所有的网址
  6. 根据需要在每个asp页面内设置strRelativePath:
  7. 
    <!--#include file="includes/info.asp"-->
    strRelativePath = "Login/"
    <!--#include file="resource/menu.asp"-->
    

答案 2 :(得分:1)

有一个类似的问题here,其中评分最高的答案表明你可以找到具有以下功能的根:

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")

等。从服务器返回root。

答案 3 :(得分:0)

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

像这样:

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

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

答案 4 :(得分:0)

可以使用HTML基本标记解决此问题:

在每个页面的开头添加此标记:

<base href="http://blah.com/login">