Theo yêu cầu của một số độc giả TechBlog.vn và thành viên trên diễn đàn tin học Việt Nam. Hôm nay TechBlog sẽ trình bày một labs đơn giản nhưng khá hay và ứng dụng được rất nhiều trong công nghệ website hiện nay.

Đó chính là rewrite wildcard DNS, tự động tạo ra các subdomain theo cấu hình sẵn. Để dễ dàng hình dung hơn, mời mọi người xem qua ví dụ sau.

Giả sử tôi quản trị một website ebook (Có domain là subdomain.com) với rất nhiều các danh mục như computer, comic, drama, bio...để truy cập các danh mục này tôi sử dụng đường dẫn cơ bản là:

<code>subdomain.com/index.php?catname=computer
subdomain.com/index.php?catname=comic
subdomain.com/index.php?catname=drama</code>

Tuy nhiên để SEO tốt (?) tôi muốn tạo tự động các subdomain tương ứng thành :

<code>computer.subdomain.com
comic.subdomain.com
drama.subdomain.com</code>

Vì trong website có rất nhiều cat, tương tự sẽ phải cấu hình rất nhiều subdomain cho việc này, gần như bất khả thi và khả năng thay đổi nếu cấu hình bằng tay là không có, không linh động. Và tôi phải tìm giải pháp để tự động hóa giải quyết vấn đề nêu trên.

Bắt tay vào việc, chúng ta cần phải có những thứ sau: (Ở đây tôi dùng php, apache, chạy trên xampp - windows7)
<ul>
<li>Server, VPS, Hosting (Phải có quyền cấu hình Wildcard cho vhost)...hoặc giả lập trên xampp như tôi.</li>
<li>Điều cơ bản: một domain, phải trỏ *.domain.ext về địa chỉ máy chủ, vps hay hosting.Tôi không có domain nên dùng domain ảo, cấu hình file hosts trên máy để thực hiện nhiệm vụ tương tự.</li>
<li>Cấu hình hỗ trợ mod_rewrite trong apache.</li>
<li>Một chút thoải mái trong tinh thần để hiểu được mấu chốt logic của vấn đề.</li>
</ul>
<strong>1. Trỏ wildcard dns cho domain về máy chủ:</strong>

Như đã trình bày ở trên, tôi làm trong xampp và tôi chọn domain ảo là subdomain.com, vậy tôi sẽ cấu hình domain này trong /Windows/system32/etc/hosts của máy.

<code>127.0.0.1 subdomain.com
127.0.0.1 www.subdomain.com
127.0.0.1 test.subdomain.com
127.0.0.1 test2.subdomain.com
127.0.0.1 test3.subdomain.com
127.0.0.1 hahaha.subdomain.com</code>

.... Còn trên domain thực tế, bạn chỉ cần trỏ A Record cho *.subdomain.com về địa chỉ máy chủ là được.

<strong>2. Tạo 1 hosting để chứa mã nguồn:</strong>

Cấu hình trong file httpd-vhosts.conf như sau:

<code>
&lt;VirtualHost subdomain.com:80&gt;
ServerAdmin postmaster@dummy-host2.localhost
DocumentRoot "D:/xampp/htdocs/subdomain"
ServerName subdomain.com
ServerAlias www.subdomain.com <span style="color: #ff0000;">*.subdomain.com</span>
ErrorLog "logs/dummy-host2.localhost-error.log"
CustomLog "logs/dummy-host2.localhost-access.log" combined
&lt;/VirtualHost&gt;</code>

Xin mọi người chú ý phần chữ đỏ (*.subdomain.com) đây chính là mấu chốt và là phần wildcart DNS trên vhosts, để tất cả các subdomain bảo đảm được nhận và xử lý tại hosts này.

<strong>3. Đoạn mã xử lý php mẫu</strong>
<code>
&lt;?php
//Techblog.vn Labs: Rewrite to subdomain
if(isset($_GET['vf']))
{
echo "This is &lt;b&gt;" . $_GET['vf'] . "&lt;/b&gt; page.";
}
?&gt;</code>

<code>Vậy nếu chạy link subdomain.com/index.php?vf=test bạn sẽ nhận được nội dung là "This is <strong>test</strong> page."</code>

<a href="http://techblog.vn/wp-content/uploads/2012/06/wildcart-dns-auto-subdomai...">

</a>

Yêu cầu đặt ra là phải rewrite để có thể chạy được test.subdomain.com mà vẫn ra kết quả tương tự. Tất cả các bước cần thiết phía trên chúng ta đã chuẩn bị rồi, chỉ cần một bước cuối cùng nữa là hoàn tất.

<strong>4. Rewrite uri to subdomain bằng .htacess</strong>

Để có thể thực hiện được yêu cầu, chúng ta cần sử dụng mod_rewrite của apache, dùng .htacess để cấu hình rules như sau:

<code>RewriteEngine On
RewriteCond %{HTTP_HOST} ^([^.]+)\.subdomain\.com$ [NC]
RewriteCond %1 !^(www|ftp|mail)$ [NC]
RewriteRule ^.?$ index.php?vf=%1 [L] </code>

Và chạy thử test.subdomain.com để xem kết quả.

<a href="http://techblog.vn/wp-content/uploads/2012/06/wildcart-dns-auto-subdomai...">

</a>

Thử tương tự với các trang:
test1.subdomain.com kết quả: This is <strong>test1</strong> page.
test2.subdomain.com kết quả: This is <strong>test2</strong> page.
test3.subdomain.com kết quả: This is <strong>test3</strong> page.
hahaha.subdomain.com kết quả: This is <strong>hahaha</strong> page.

Vậy là cơ bản vấn đến đã được giải quyết, việc ứng dụng giải pháp trên và xử lý nghiệp vụ thì liên quan đến phần mã nguồn, lập trình nên tôi không trình bày tiếp. Nếu các bạn có khúc mắc gì xin vui lòng comment tại http://techblog.vn/domain-hosting-se...o-website-540/ dưới bài viết tôi sẽ cố gắng hỗ trợ hết mình trong phạm vi có thể.