การตั้ง Redirect จาก Subdomain ไปยังโฟลเดอร์ด้วย DirectAdmin และ htaccess

สวัสดีครับท่านผู้อ่าน

วันนี้ผมได้ลง Theme เสร็จเป็นเรื่องเป็นราวสักที ด้วยความช่วยเหลือจาก Duena theme ก็เลยจับมาทำ Child theme ที่เรียนมาจากงานอบรมที่ Hubba วันก่อน จนได้เป็นธีมเว็บอย่างที่ท่านเห็นนี่ล่ะครับ ถ้าจัดการอีกนิดหน่อยเรื่องอักษรเสร็จก็aคงได้ฤกษ์ขึ้น Version 1.0 สักทีครับ ก็คงต้องขอความกรุณาจากท่านผู้อ่านทุกท่านเข้าชมบ้างนะครับ (>/\<)


วันนี้ผมจะทำ Subdomain สำหรับโครงงานวิชา CPE111 ที่เคยพูดถึงนั่นล่ะครับ ไอ้ครั้นจะทำ Multisite ก็ยุ่งยากเกินไป (อีกทั้ง Host ที่ผมใช้เค้าไม่อนุญาตด้วย) ก็เลยใช้วิธีการ redirect ดีกว่า

ว่าแล้วก็มาดูกันดีกว่าครับ

ขั้นตอนแรกก็เข้าไปที่ control panel ของเว็บครับ ในที่นี้โฮสต์ผมใช้ DirectAdmin ครับ จากนั้นไปที่ subdomain management ครับ

redirect-1

การเข้าไปจัดการ Subdomain ของ DirectAdmin

ระบบจะแสดงหน้ารายชื่อ Subdomain ที่เราเคยลงทะเบียนไว้ ให้พิมพ์ที่ช่อง Subdomain ที่เราจะสร้างใหม่ แล้วกด Add ครับ

การเพิ่มรายชื่อ Subdomain ใน Website เรา

การเพิ่มรายชื่อ Subdomain ใน Website

จากนั้นระบบจะสร้าง folder ที่ชื่อเดียวกับ subdomain ที่เราเพิ่งสร้างไป ให้ FTP เข้าไปครับ จากนั้นสร้างไฟล์ .htaccess ขึ้นมาครับ

การสร้างไฟล์ .htaccess ไว้ใน folder ของ subdomain

การสร้างไฟล์ .htaccess ไว้ใน folder ของ subdomain

ในที่นี้ผมใส่คำสั่งใน .htaccess ไว้ดังนี้ครับ


RewriteEngine On
Options +FollowSymlinks
RewriteBase /
RewriteCond %{HTTP_HOST} [subdomain].[webname] [NC]
RewriteRule ^(.*)$ http://[webname]/[folder]/$1 [R=301,L]

โดยให้แทน [subdomain] แทนชื่อ subdomain ที่เราเพิ่งสร้าง [webname] แทนชื่อเว็บเรา และ [folder] เป็น path ของ folder ที่เราอยากให้ไป แต่ละคำสั่งมีความหมายดังนี้ครับ

เป็นการบอกว่าให้ทำคำสั่งในแท็กนี้หากระบบลง mod_rewrite เอาไว้ เพื่อป้องกัน error 500 ครับ

RewriteEngine On

เป็นการบอกว่าให้เปิดการ rewrite ชื่อเว็บ

Options +FollowSymlinks

เป็นการบอกว่าให้ตามโฟลเดอร์ที่เป็น shortcut ด้วย (ปกติไม่เปิด) เผื่อไว้ว่าที่อยู่ที่เราจะทำเป็น shortcut

RewriteBase /

เป็นการบอกว่าการตามโฟลเดอร์ต่อไปให้เริ่มจาก /

RewriteCond %{HTTP_HOST} [subdomain].[webname] [NC]

เป็นการระบุเงื่อนไขว่าให้ทำคำสั่งข้างล่างหาก Domain name ที่เข้ามาเป็น [subdomain].[webname] โดย [NC] คือไม่ต้องสนใจว่าตัวเล็กตัวใหญ่ครับ ให้ทำเหมือนๆ กันหมด

RewriteRule ^(.*)$ http://[webname]/[folder]/$1 [R=301,L]

เป็นการบอกว่า ให้เปลี่ยน path ใดๆ เป็น http://[webname]/[folder]/ ตามด้วยที่อยู่ที่ระบุต่อท้าย subdomain โดยให้เป็นการ redirect และทำคำสั่งนี้เป็นคำสั่งสุดท้าย ไม่ทำตัวอื่นต่อครับ

แล้วก็อัพโหลด เป็นอันเสร็จพิธีครับ

การทำ redirect แบบนี้ดีกว่าการใช้ header redirect ของ php ตรงที่เราสามารถเอา path มาต่อท้าย subdomain ได้ครับ เช่น http://cpe111.itpcc.net/cpe111-4-years-in-4-hours/ ก็จะไปที่ www.itpcc.net/cpe111/cpe111-4-years-in-4-hours/ ให้โดยอัตโนมัติครับ

แอบอ้างจาก

http://forum.directadmin.com/showthread.php?t=37072&p=187208#post187208 — การเขียน .htaccess ใน directAdmin

http://httpd.apache.org/docs/2.2/rewrite/flags.html — การใช้ flag ใน mod_rewrite