2012-04-01 64 views
12

我有一個域名:TestSite.com。我爲這個網站創建了幾個子域,並將它們稱爲first.TestSite.com,second.TestSite.com等。如何參考主域而不用硬編碼它的名字?

如何參考TestSite.com 相對而不必在html或aspx文件在first.TestSite.com?我的意思是(使用文件夾爲例),如果我有第一

一個文件夾測試網站和子文件夾第一

測試網站/,然後從第一I可以通過

指其父測試網站文件夾

../

我應該使用什麼從first.TestSite.com指TestSite.com?謝謝。

+2

文件夾是嵌套層次結構。子域名不是。子域名可能會引入javascript和cookie和ssl證書的問題。它甚至可以引入圖像緩存等問題 - 從first.testsite.com獲得blank.gif與來自testsite.com的blank.gif具有相同的圖像?它不是,對於瀏覽器。 – 2012-12-27 13:56:51

+0

子域名也可能導致搜索引擎蜘蛛和排名問題,如果這對你的情況很重要。 – 2012-12-27 13:58:58

+0

@BrianWhite是正確的SSL。另外,SSL只能使用一個IP地址(使用Apache)。因此,即使您有錢購買每個子域的SSL證書,他們也需要擁有自己的IP。根據您的ISP限制,這可能無法實現。 – cgTag 2012-12-27 18:52:26

回答

11

沒有辦法使用純粹的相對鏈接。您必須將其編程爲字符串操作。使用正則表達式較短的版本:

喜歡的東西:

var host = location.host; 
var lastPeriod = host.lastIndexOf("."); 
var remainder = host.substring(0, lastPeriod); 
var afterSecondLastPeriod = remainder.lastIndexOf('.') + 1 
var baseDomain = host.substring(afterSecondLastPeriod); 
console.log(baseDomain); 

編輯

var baseDomain = host.match(/[^.]*\.[^.]*$/)[0] 

這是通用的,所以它總是返回的最後一部分。無論是a.TestSite.comb.a.TestSite.com等,它都會返回TestSite.com

如果此假設不正確,您將不得不對其進行修改。

5

如果您想保留相關鏈接,可以使用base元素。

[基本元素的href]屬性指定一個絕對URI,它充當用於解析相對URI的基礎 URI。

所以,添加一個base元素,指定href你想,所有的頁面上的相對URI現在使用的URI您指定爲基地 URI。

<head> 
   <base href="http://testsite.com" /> 
</head> 

這就是你所需要的。但是,如果您想使事情更簡潔一些,則可以使用System.Configuration. ConfigurationManager . AppSettings從web.config中提取該URI。這裏有一個aspx片段:

<head> 
   <base href="<%= ConfigurationManager.AppSettings["rootdomain"] %>" /> 
</head> 

而且在web.config:

<configuration> 
    <appSettings> 
    <add name="rootdomain" value="http://testsite.com" /> 
    </appSettings> 
</configuration> 

這種方法可以讓你從一個其值可以從web.config驅動影響許多元素。

1

既然你標記你的問題的ASP。NET,我會假設你想要做這個服務器端,所以你不依賴於客戶端上的JavaScript來生成HTML鏈接。

首先,確保你在你的子域名的網站有一個web.config文件,這增加了配置:

<configuration> 
    <appSettings> 
    <add name="MainDomain" value="example.com" /> 
    </appSettings> 
</configuration> 

在你的ASPX頁面使用此設置,超鏈接在您的子網域「網頁應該是這樣的:

<a href="<%$ AppSettings: MainDomain %>">Go to main domain home page</a> 
<a href="<%$ AppSettings: MainDomain %>/products.aspx">Go to products page on the main domain</a> 

name="MainDomain"設置將從配置文件中讀取,並將其插入到它說:<%$ AppSettings: MainDomain %>的頁面。這樣,您就可以在服務器端創建所需的HTML,而無需硬編碼。

如果您需要更改名稱,只需更新配置文件,所有頁面將自動使用新的域名。

1

另一種解決方案是使用活動服務器的原始域名,但將其指向您的開發環境。

您可以通過在此文件中添加行來覆蓋Windows中的DNS查找。

C:\ WINDOWS \ SYSTEM32 \ DRIVERS \等\主機

添加使用文本編輯器下面。

127.0.0.1 www.livesite.com 
127.0.0.1 first.livesite.com 
127.0.0.1 second.livesite.com 

這些域現在將映射到locahost。因此,不需要對HTML進行測試。

+1

警告,將多個域指向127.0.0.1總會以奇怪的方式引起我的問​​題。它從來沒有成爲我面對的複雜問題的簡單解決方案。我已經在很多不同的情況下嘗試過它,並總是最終恢復它。 – 2012-12-27 13:52:23

+1

@Brian:AFAIK沒有什麼錯,它將多個主機名指向127.0.0.1,而不僅僅是將多個主機名指向任何其他IP地址。但是,它意味着您需要配置您的開發Web服務器來執行基於名稱的虛擬主機(除非您想讓所有開發站點看起來完全相同)。 – 2012-12-27 18:07:20

+0

@BrianWhite大多數Web開發人員使用主機將多個域指向其本地主機。否則,不可能在多個網站上工作。由於只有一個站點可以配置爲使用本地主機。我所做的是將所有網站的.com更改爲.local。例; www.thinkingmedia.ca在我的開發機上變成www.thinkingmedia.local。我目前有50多個本地站點運行沒有任何問題。對不起,您遇到了麻煩,但是如果您開始提出有關問題的新問題。我很樂意提供幫助。 – cgTag 2012-12-27 18:48:22

相關問題