现在,我遇到了麻烦。 首先,我有一个页面,我们称之为“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应用程序,它将位于每个服务器的不同目录上。
答案 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)
没有灵丹妙药。我就是这样做的。
<!--#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">