2008-08-04 25 views
21

Tôi đang tìm cách cho phép người dùng kiểm soát tên miền phụ của ứng dụng tôi đang chơi với, giống như Basecamp, nơi nó là customusername.seework.com.Cách tạo tài khoản người dùng miền phụ trong một webapp

Điều cần thiết ở đầu số DNS để cho phép những thứ này được tạo động và có sẵn ngay lập tức.

Và làm cách nào để bạn đề xuất xử lý vấn đề này trong logic của trang web? Htaccess quy tắc để tra cứu tên miền phụ trong DB?

Trả lời

13

Cách chúng tôi làm điều này là để có một 'catch tất cả 'cho tên miền của chúng tôi đã đăng ký trong DNS sao cho any.ourdomain.com sẽ trỏ đến máy chủ của chúng tôi.

Với Apache, bạn có thể thiết lập một bản tóm tắt tương tự cho vhost của mình. Tên máy chủ phải là một tên tĩnh duy nhất nhưng chỉ thị ServerAlias ​​có thể chứa một mẫu.

Servername www.ourdomain.com 
ServerAlias *.ourdomain.com 

Bây giờ tất cả các tên miền sẽ kích hoạt vhost cho dự án của chúng tôi. Phần cuối cùng là để giải mã các tên miền thực sự sử dụng để bạn có thể làm việc ra tên người dùng trong mã của bạn, một cái gì đó tương tự (PHP):

list($username) = explode(".", $_SERVER[ "HTTP_HOST" ]); 

hoặc một RewriteRule như đã gợi ý rằng âm thầm maps user.ourdomain.com/foo/bar tới www.ourdomain.com/foo/bar?user=user hoặc bất kỳ thứ gì bạn thích.

+0

làm thế nào để bạn thiết lập một catch-tất cả tương tự trên IIS – Vikram

2

Bí quyết để đó là sử dụng URL viết lại để name.domain.com minh bạch bản đồ để cái gì đó như domain.com/users/name trên máy chủ của bạn. Một khi bạn bắt đầu xuống con đường đó, nó khá tầm thường để thực hiện.

+0

điều này có dẫn đến chuyển hướng và thay đổi url trong thanh địa chỉ không?Tôi đang tìm kiếm URL để duy trì username.domain.com KHÔNG chuyển hướng đến domain.com/username – parliament

+1

@parliament: Nó sẽ không cần phải chuyển hướng, không. Viết lại có thể trong suốt (ví dụ: hầu hết mọi trang web WordPress bạn truy cập đều có URL thân thiện, nhưng các yêu cầu thực sự sẽ index.php). –

8

Đừng lo lắng về DNS và URL viết lại

bản ghi DNS của bạn sẽ được tĩnh, một cái gì đó như:

*.YOURDOMAIN.COM A 123.123.123.123 

Hỏi nhà cung cấp DNS của bạn để làm điều đó cho bạn (nếu nó không được thực hiện đã) hoặc tự mình làm nếu bạn có quyền kiểm soát bản ghi DNS của mình. Điều này sẽ tự động trỏ tất cả các tên miền phụ của bạn (các tên miền hiện tại và tương lai) vào cùng một máy chủ HTTP.

Sau khi hoàn tất, bạn sẽ chỉ cần phân tích cú pháp tiêu đề HOST trên mỗi yêu cầu http để phát hiện tên máy chủ nào được sử dụng để truy cập tập lệnh phía máy chủ trên máy chủ http của bạn.

Giả sử bạn đang sử dụng ASP.NET, đây là loại ví dụ ngớ ngẩn tôi đã đưa ra nhưng công trình và chứng minh sự đơn giản của phương pháp này:

<%@ Language="C#" %> 
<% 
string subDomain = Request.Url.Host.Split('.')[0].ToUpper(); 
if (subDomain == "CLIENTXXX") Response.Write("Hello CLIENTXXX, your secret number is 33"); 
else if (subDomain == "CLIENTYYY") Response.Write("Hello CLIENTYYY, your secret number is 44"); 
else Response.Write(subDomain+" doesn't exist"); 
%> 
0

Tôi đang tìm cách làm điều tương tự (www.mysite.com/SomeUser).

Những gì tôi đã làm là tôi sửa 404.shtml bao gồm phía máy chủ này bao gồm (SSI) mã:

<!--#include virtual="404.php" -- > 

Sau đó, tôi tạo ra các tập tin 404.php, nơi tôi phân tích cú pháp URL để kiểm tra tên của người dùng và cho thấy họ thông tin từ cơ sở dữ liệu.

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