2012-04-01 31 views
12

Tôi có một tên miền: TestSite.com. Tôi tạo một số tên miền phụ cho trang web này và tham khảo chúng như first.TestSite.com, second.TestSite.com, v.v.Làm thế nào để tham khảo tên miền chính mà không cần mã hóa cứng tên của nó?

Làm cách nào để tham chiếu đến TestSite.com tương đối mà không cần phải viết mã cứng tên của nó trong một tệp html hoặc aspx trong first.TestSite.com? Những gì tôi có nghĩa là (sử dụng thư mục làm ví dụ) nếu tôi có một thư mục TestSite và một thư mục phụ đầu tiên

TestSite/đầu tiên

, sau đó từ đầu tiên tôi có thể tham khảo thư mục TestSite mẹ bởi

../

gì tôi sử dụng để tham khảo TestSite.com từ first.TestSite.com? Cảm ơn.

+2

Thư mục là một hệ thống phân cấp lồng nhau. Tên miền phụ không. Miền phụ có thể giới thiệu các vấn đề về javascript và cookie và chứng chỉ ssl. Nó thậm chí có thể giới thiệu các vấn đề cho những thứ như bộ nhớ đệm hình ảnh - là blank.gif từ first.testsite.com cùng một hình ảnh như blank.gif từ testsite.com? Nó không phải là, đến một trình duyệt. –

+0

Tên miền phụ cũng có thể gây ra sự cố cho trình thu thập thông tin và thứ hạng của công cụ tìm kiếm, nếu điều đó quan trọng đối với trường hợp của bạn. –

+0

@BrianWhite là đúng SSL. Ngoài ra, SSL sẽ chỉ hoạt động với một địa chỉ IP (với Apache). Vì vậy, ngay cả khi bạn đã có tiền để mua SSL certs cho mỗi tên miền phụ họ sẽ cần phải có IP riêng của họ. Điều này có thể không thực hiện được tùy thuộc vào giới hạn ISP của bạn. – cgTag

Trả lời

11

Không có cách nào sử dụng liên kết thuần túy tương đối. Bạn phải lập trình nó như một thao tác chuỗi.

Cái gì như:

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

EDIT: phiên bản ngắn hơn sử dụng regex:

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

Đây là nói chung, vì vậy nó sẽ luôn luôn trở lại phần cuối cùng. Bất kể đó là a.TestSite.com, b.a.TestSite.com, v.v., nó sẽ trả lại TestSite.com.

Bạn sẽ phải sửa đổi nếu giả định này không chính xác.

5

Nếu bạn muốn giữ liên kết tương đối của mình, bạn có thể sử dụng phần tử base.

Thuộc tính phần tử cơ bản href] chỉ định URI tuyệt đối hoạt động như cơ sở URI để giải quyết URI tương đối.

Vì vậy, thêm một yếu tố base, xác định href bạn muốn, và tất cả các URI tương đối trên trang hiện có sử dụng URI bạn đã chỉ định là cơ sở URI.

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

Đó là tất cả những gì bạn cần. Tuy nhiên, nếu bạn muốn làm cho mọi thứ sạch hơn một chút, bạn có thể kéo URI đó từ web.config bằng cách sử dụng System.Configuration. ConfigurationManager . AppSettings. Dưới đây là một đoạn mã aspx:

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

Và web.config:

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

Phương pháp này cho phép bạn ảnh hưởng đến nhiều yếu tố từ một và giá trị của nó có thể được điều khiển từ web.config.

1

Vì bạn đã gắn thẻ câu hỏi ASP của mình.NET, tôi sẽ giả sử bạn muốn làm điều này phía máy chủ, vì vậy bạn không dựa vào JavaScript ở phía máy khách để tạo ra các liên kết HTML.

Trước hết, hãy chắc chắn bạn có một tập tin web.config trong các trang web tên miền phụ của bạn, và thêm video này vào cấu hình:

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

Sử dụng cài đặt này trong các trang ASPX của bạn, siêu liên kết trên một trong các tên miền phụ của bạn 'trang sẽ trông như thế này:

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

thiết lập với name="MainDomain" sẽ được đọc từ tập tin cấu hình, và chèn vào trang mà nó nói <%$ AppSettings: MainDomain %>. Bằng cách này, bạn đang tạo HTML được yêu cầu ở phía máy chủ, không yêu cầu mã hóa cứng.

Nếu bạn cần thay đổi tên, chỉ cần cập nhật tệp cấu hình và tất cả các trang sẽ tự động sử dụng tên miền mới.

1

Một giải pháp thay thế sẽ là sử dụng tên miền gốc cho máy chủ trực tiếp, nhưng trỏ nó đến môi trường phát triển của bạn.

Bạn có thể ghi đè tra cứu DNS trong Windows bằng cách thêm các dòng vào tệp này.

C: \ Windows \ System32 \ drivers \ etc \ hosts

Thêm dòng sau sử dụng một trình soạn thảo văn bản.

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

Các miền này giờ đây sẽ ánh xạ tới locahost. Vì vậy, sẽ không cần phải hack HTML để thử nghiệm.

+1

Cảnh báo, việc trỏ nhiều tên miền đến 127.0.0.1 luôn gây ra sự cố cho tôi theo những cách kỳ lạ. Nó chưa bao giờ trở thành giải pháp đơn giản cho vấn đề phức tạp mà tôi đang phải đối mặt. Tôi đã thử nó trong nhiều tình huống khác nhau và luôn luôn kết thúc nó. –

+1

@Brian: Không có gì sai AFAIK khi trỏ nhiều tên máy chủ đến 127.0.0.1, bất kỳ điều gì khác ngoài việc trỏ nhiều tên máy chủ đến bất kỳ địa chỉ IP nào khác. Nó có, tuy nhiên, có nghĩa là bạn cần phải cấu hình máy chủ web phát triển của bạn để làm tên dựa trên lưu trữ ảo (trừ khi bạn _want_ tất cả các trang web phát triển của bạn trông giống hệt nhau). –

+0

@BrianWhite phần lớn các nhà phát triển web sử dụng máy chủ để trỏ nhiều tên miền đến localhost của họ. Nếu không, nó không thể làm việc trên nhiều hơn sau đó một trang web. Vì chỉ có một trang có thể được cấu hình để hoạt động ngoài localhost. Những gì tôi làm là thay đổi .com thành .local cho tất cả các trang web của tôi. Thí dụ; www.thinkingmedia.ca trở thành www.thinkingmedia.local trên máy dev của tôi. Hiện tại tôi có hơn 50 trang web địa phương đang chạy mà không gặp bất kỳ sự cố nào. Xin lỗi bạn đã gặp sự cố, nhưng nếu bạn bắt đầu một câu hỏi mới về các vấn đề. Tôi rất vui khi được giúp đỡ. – cgTag

Các vấn đề liên quan