2012-04-15 74 views
3

現在,我遇到了麻煩。 首先我有一個頁面,我們稱之爲「http://blah.com/login」。有沒有更簡單的方法來做經典ASP「相對路徑」?

這顯然進入海峽 「的index.asp」

Main.asp的A線:

<!--#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應用程序,將在每個服務器不同的目錄。

回答

2

沒有魔法修復。這是我如何做到這一點。

  1. 創建一個單獨的包含文件DIM的和初始化的全局變量稱爲info.asp
  2. 裏面info.asp DIM一個名爲strRelativePath變量並初始化它「」
  3. 包括在頂部info.asp menu.asp上面的每個asp頁面包括
  4. 修改菜單。ASP和包括<%= strRelativePath%>在所有的URL
  5. 內每個ASP頁設置strRelativePath根據需要:

<!--#include file="includes/info.asp"--> 
strRelativePath = "Login/" 
<!--#include file="resource/menu.asp"--> 
+0

我會試試!看起來它會做的修復!也許應用程序變量....? – Pachonk 2012-04-17 01:21:23

0

可以使用Virtual代替File因爲Virtual從根目錄接受一個絕對路徑,而不是相對像File

像這樣:

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

此外,請確保您的IIS設置允許包括,請參閱此鏈接的詳細信息: http://tech.mikeal.com/blog1.php/server-side-includes-for-html-in-iis7

+1

正如我以前說過,我不能這樣做,因爲這個應用程序有時會完全的目錄下上傳,或根的時候。現在它是在登錄關閉目錄的根,所以如果我想我可以輸入: 但它需要versitile爲< - - #INCLUDE VIRTUAL =「/登錄/資源/ menu.asp」!>無論它被上傳。儘管我很欣賞這種迴應! – Pachonk 2012-04-15 08:06:41

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應用程序的任何虛擬文件夾路徑而有所不同。

+0

我沒有時間,現在試試這個,但是這看起來正是我一直在尋找。 – Pachonk 2012-04-15 18:38:25

+0

我剛測試過它。前綴被設置爲「/」不過,我需要它來獲取設置爲「/登錄/」 ... – Pachonk 2012-04-15 19:39:25

+0

亞歷克斯「登陸」是你的文件夾嗎?您知道它與應用程序根文件夾的相對位置。我的理解是你的問題是你的應用程序可能被放置在一個更大的網站中,這個文件夾在開發時並不爲你所知。我提供的幫助函數爲您提供了從當前網站的根到應用程序根文件夾的虛擬路徑。這使您可以動態構建絕對路徑,以糾正特定網站。 「/」路徑表示您的根文件夾尚未配置爲應用程序。 – AnthonyWJones 2012-04-15 21:03:22

0

這可以固定HTML基標記:

在每頁頁面的開始添加此標籤:

<base href="http://blah.com/login"> 
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") 

等從服務器返回根。

+0

這適用於我! – 2014-11-30 12:10:28

相關問題