การสร้าง Dynamic Sub Domain


หน้าแรก คอมพิวเตอร์ อินเตอร์เน็ต การสร้าง Dynamic Sub Domain
Dynamic Sub Domain คื่ออะไร?... หลายท่านอาจจะงง

  โดยปกติแล้วการสร้าง sub domain เราสามารถทำได้ หากเราเป็นเจ้าของ Server หรือเป็นผู้เช่า Server โดยการเข้าไปที่ Control Panel ของ Web Server นั้นๆ จะมีหน้าการสร้าง Sub Domain เช่น เว็บผม http://www.goragod.com เมื่อทำการสร้าง sub domain จะได้เป็น http://subdomainname.goragod.com และจะได้โฟลเดอร์ชื่อ subdomainname ภายใต้ root ไดเร็คทอรี่สำหรับเก็บไฟล์ของ sub domain นั้นๆ บน Server เช่น

http://www.goragod.com => /public_html/
http://chat.goragod.com => /public_html/chat/
http://blog.goragod.com => /public_html/blog/

  ส่วน Dynamiic Sub Domain ก็จะมีความหมายประมาณว่า การสร้าง sub domain เทียม โดยไม่ต้องทำการสร้าง(หรือสร้างก็ได้) ไดเร็คทอรี่สำหรับเก็บไฟล์ หรือ อาจสร้างโฟลเดอร์ไว้ที่อื่นๆก็ได้ตามแต่เรากำหนด โดยที่ไม่จำเป็นต้องกระทำกับ Server จริงๆบน Control Panel เช่นการสร้าง sub domain แล้วเก็บข้อมูลของหน้าเพจนั้นๆไว้บน MySQL เวลาเรียกดูก็เรียกผ่าน MySQL เป็นต้น หรืออีกตัวอย่างหนึ่งก็เช่น ไดอารี่ หรือ บล๊อก ที่มีชื่อเจ้าของเป็น ชื่อ sub domain(เช่น GBlog)

  ในตอนก่อนผมได้เสนอการทำ Subdomain บน Localhost ไปแล้ว สำหรับการทำบน Server ก็มีวิธีทำคล้ายๆกัน ต่างกันที่เราไม่สามารถทำการ config Apache ด้วยตัวเองได้เท่านั้น สำหรับหลักการในการ config Web Server เพื่อทำ dynamic sub domain ก็คือการทำ Wildcard DNS

 ปกติแล้วการทำ sub domain เราต้องทำการ config DNS ให้กับ sub domain ของเรา เช่น chat.goragod.com ส่วนการทำ Wildcard DNS คือการทำ ทุก sub domain ให้กับ DNS เช่น *.goragod.com อันหมายถึงการทำให้มันรู้จักได้ทุก sub domain เลยทีเดียว สำหรับขั้นตอนในการทำ Wildcard DNS มีข้อแตกต่างกันตาม Server แต่ละชนิด

ผมยกตัวอย่างของ Direct Admin นะครับ ให้เข้าไปที่หน้า DNS Setup
1.ทำการ Add Domain Record โดยกำหนด Name เป็น * และกำหนด type เป็น A และ Value เป็น IP Address ของ Server ของคุณ

2.แล้วคลิก Add จะได้ผลลัพท์ดังรูป เป็นการเสร็จการติดตั้ง Wildcard DNS
สำหรับ Server ชนิดอื่นให้ทำตามหลักการเดียวกันนี้ หากไม่มี Control Panel คงต้องให้ Admin จัดการให้ละกันครับ

Step2

หลังจากที่เรา Setup DNS แล้ว เมื่อเราทำการเรียกเพจใดๆ มันจะวิ่งไปหาเพจ ที่ root ของ Server ทั้งหมด เช่น http://www.localhost.com, http://chat.localhost.com ก็จะวิ่งไปอ่านเพจที่เรียกบนไดเร็คทอรี่เดียวกันเสมอ ทำให้เราสามารถทำการดักและแยกเอา sub domain ออกมาตามต้องการได้ 

การเขียนโค้ดให้ PHP รู้จักและแยกแยะ Sub domain แต่ละตัวได้โดยอัตโนมัติ มีวิธีหลักๆ อยู่ 2 วิธีครับคือการใช้ .htaccess และการเขียนโค้ดเพื่อแยก sub domain ด้วย PHP

เรามาดูแบบง่ายๆกันก่อนการเขียนโค้ดแยกด้วย PHP ธรรมดา ไม่ต้องมีเทคนิคพิเศษอะไร

<?php
 // แยกเอาชื่อ subdomain ออกมา
 $subdomain = preg_replace( '/(.*?)[.]?localhost.com/isu' , '1' , $_SERVER[HTTP_HOST] );
 // ถ้าไม่ได้กำหนด subdomain มาให้เป็น www
 // เช่น http://localhost.com
 $subdomain = ( $subdomain == '' ) ? 'www' : $subdomain;

 //แสดงผล subdomain ที่เรียก
 echo "subdomain=$subdomain";

 // เรียกไปยังไดเร็คทอรี่ชื่อ subdomain
 // เช่น www ให้เรียกใช้ไฟล์ www/index.php
 include( "$subdomain/index.php" ); 
?>


วิธีการก็คือการอ่าน sub domain จาก ตัวแปร $_SERVER[HTTP_HOST] ที่ส่งมา แล้วทำการแยกเอาส่วนที่เป็น Sub domain ออกมาแล้วไปทำการเรียกเพจตาม path ของ sub domain นั้นๆ

Step3

อีกวิธีคือการใช้ .htaccess เพื่อแยกเอา sub domain ออกมาจาก server เลย

RewriteCond %{HTTP_HOST} ^([^.]+).localhost.com
RewriteRule ^(.*).php$ index.php?user=%1&module= [L,QSA]

ดูตัวอย่างเมื่อเรียกเพจกันเลย

เมื่อทำการเรียก
http://www.localhost.com
Apache จะไปทำการเรียกเพจโดยส่งค่าต่างๆไปเป็น
index.php?user=www&module=index

<?php
  // อ่านค่าที่ส่งมา
  $subdomain = $_GET[user];
  $module = $_GET[module];

  // ทำการเรียกหน้าตามที่กำหนด
  include( ($subdomain/$module.php" );
?>


refer: http://www.goragod.com/knowledge-การสร้าง%20Dynamic%20Sub%20Domain%20ตอนที่%202.html



ขึ้นไปด้านบน