Asp classic 有没有更简单的方法来做经典的ASP;相对路径;?

Asp classic 有没有更简单的方法来做经典的ASP;相对路径;?,asp-classic,Asp Classic,现在,我有麻烦了。 首先,我有一页,我们称之为“http://blah.com/login“ 这显然是“index.asp”的问题 Main.asp的一行: <!--#include file="resource/menu.asp"--> 页面顶部包括我的菜单所需的所有内容。。。因此: resource/menu.htm的一部分: <div id="colortab" class="ddcolortabs"> <ul> <li><a h

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

这显然是“index.asp”的问题

Main.asp的一行:

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

页面顶部包括我的菜单所需的所有内容。。。因此:

resource/menu.htm的一部分:

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


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

我的解决方案: 为任何子页面制作一个包含子页面的菜单。
但请稍等……这是可行的,但它会变得非常混乱……我该怎么做才能只使用一个主“menu.asp”而不是“menu\u sub.asp”?使用“/main/announcements.asp”“这不是一个选项,因为这是一个web应用程序,每个服务器将位于不同的目录上

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

像这样:

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

此外,请确保您的IIS设置允许包含,有关详细信息,请参阅此链接:
将此功能添加到菜单中。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应用程序的虚拟文件夹路径的不同而相应变化。

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

  • 创建一个单独的include文件,用于DIM和初始化名为info.asp的全局变量
  • 在info.asp内部设置名为strRelativePath的变量并将其初始化为“”
  • 在菜单上方的每个asp页面顶部包含info.asp。asp包含
  • 修改menu.asp并包含在所有URL中
  • 在每个asp页面内,根据需要设置strRelativePath:
  • 
    strRelativePath=“Login/”
    
    这可以通过HTML基本标记修复:

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


    有一个类似的问题,最高评分的答案表示您可以通过以下函数找到根目录:

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


    等等,从服务器返回根。

    正如我前面所说,我无法这样做,因为此应用程序有时可以完全上载到目录下,有时可以上载到根目录下。现在它位于根目录下的登录目录中,所以如果我想输入:但无论上传到哪里,它都必须是版本。不过,我非常感谢您的回复!我现在没有时间尝试这个,但这看起来正是我想要的。我只是测试了一下。前缀设置为“/”,但我需要将其设置为“/login/”…Alex:“login”您的文件夹对吗?您知道它相对于应用程序根文件夹的位置。我理解你的问题是,你的应用程序可能被放在一个更大的网站上,在开发时你不知道的文件夹中。我提供的helper函数提供了从当前网站根目录到应用程序根文件夹的虚拟路径。这允许您动态地构建针对特定网站的绝对路径。路径“/”表示尚未将根文件夹配置为应用程序。但是,global.asa在我的ftp的根目录中,而其余的是/login
    <base href="http://blah.com/login">
    
    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")