การเขียนโค้ดเล็กน้อยให้ URL Friendly ด้วย .htaccess ภาคที่ 1
posted on 13 Feb 2009 10:06 by laptopcomputer in Tips-Tricksเรื่องนี้เป็นเรื่องที่ผมกำลังสนใจมากที่สุดในตอนนี้ จึงอยากนำมาให้เพื่อน ๆ ได้อ่านกันบ้างเผื่อว่าจะได้แนะนำผมบ้าง ต้องยอมรับจริง ๆ ว่าทำเว็บไซต์มาไม่เคยนึกในจุดนี้เลย นานมาแล้วได้เข้าไปอ่านในไทยเสียวบอร์ด(thaiseoboard) แล้วเกิดว่าชอบ และมีประโยชน์มาก จึงอยากทำบ้างก็เลยหาข้อมูลในเรื่องนี้อยู่(ยังทำไม่เป็นเลย) เพื่อนๆ คนไหนที่มีความรู้ด้านนี้ก็ช่วยอนุเคราะห์หน่อยนะครับ
หลายๆ คนคงรู้จักกับ mod_rewrite ซึ่งเป็น module ของ apache ซึ่งตัวนี้น่ะ มันมีประโยชน์ค่อนข้างมากในการทำ url friendly เพื่อให้ google รัก yahoo หลง
ซึ่งโปรแกรม หลายคนอาจจะเขียนตรงๆ ไปเลยเช่น
- RewriteCond %{REQUEST_FILENAME} !-f
- RewriteCond %{REQUEST_FILENAME} !-d
- RewriteRule ^tag\/([^\?].*)$ n5-tag.php?tag=$1 [L]
แบบนี้ แล้วทีนี้ถ้าเวบเรามีขนาดใหญ่ module เป็นร้อยๆ ไฟล์ .htaccess ของรามีหวังยาวเป็น ร้อยๆ บรรทัดเป็นแน่ เอางี้ดีกว่าลองมาทำตามวิธีผม ไฟล์เดียวครอบจักรวาล
1. ไฟล์ .htaccess
- RewriteEngine On
- RewriteCond %{REQUEST_FILENAME} -f [OR]
- RewriteCond %{REQUEST_FILENAME} -d
- RewriteRule ^(.+) - [PT,L]
- RewriteRule ^(.*) index.php
จบแล้วครับไฟล์ .htaccess เราใช้แค่นี้ คือบอกมันว่า "ไม่ว่าจะเจออะไร วิ่งมาที่ index.php ให้หมดเลยนะ"
2. ไฟล์ common.inc.php
- // Relative path
- $conf['dir'] = str_replace('\\', '/', dirname(__FILE__));
- // Absolute path
- $conf['path'] = "http://".$_SERVER['SERVER_NAME'].str_replace($_SERVER['DOCUMENT_ROOT'], '', $conf['dir']);
- // uri แบบที่ตัด root folder ออก
- $conf['uri'] = str_replace($conf['dir'].'/', '', $_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI']);
- // explode เพื่อตัดข้อมูลหลังจาก ? ออกไป
- list($xuri) = explode('?', $conf['uri'], 2);
- // explode เพื่อสร้าง array โดยการ แยก ที่ตำแหน่ง /
- $uri = explode("/", $xuri);
ส่วนนี้เป็นการเอา absolute path มาแยกออกเป็น array เพื่อที่จะนำไปใช้
3. ไฟล์ index.php
- require('common.inc.php');
- // ถ้าไม่เจอข้อมูลอะไรให้เรียก home/ เป็น default
- $loadmodule = ($uri[0]) ? $uri[0] : 'home';
- $inc = 'modules/'.$loadmodule;
- // เช็คดูว่าถ้ามี module นี้จริงๆ ให้ include เข้ามา
- if (is_dir($inc)) {
- include($inc.'/compile.php');
- }
ไฟล์เรียกใช้งานโดยมีการ inc common.inc.php เข้ามาใช้ ทีนี้เราก็สามารถเอา array ต่างๆ ไปเรียกใช้ได้ตามสะดวกแล้วครับ เช่น
http://www.domain.com/blog/tee/addnew
แบบนี้เราก็จะได้ array ออกมา 3 ชุดคือ
$uri[0] จะได้ blog
$uri[1] จะได้ tee
$uri[2] จะได้ addnew
ซึ่งพวกนี้เราสามารถนำไปใช้ใน เงื่อนไข ได้ตามปกติเลย เช่น
- if ($uri[0] == 'blog') {
- //load blog module
- include('modules/blog/compile.php');
- }
แล้วใน modules/blog/compile.php เรายังสามารถเรียก action ต่างๆ ได้อีกเช่น
- switch($uri[2]) {
- case 'addnew' :
- // do something
- break;
- default :
- // do somthing else
- break;
- }
อ่านบทความต่อไป >> การเขียนโค้ดเล็กน้อยให้ URL Friendly ด้วย .htaccess ภาคที่ 2
บทความจาก http://www.naitam.com/naitam-webdesign/view.php?id=13
#1 By โปรโมทเว็บฟรี (115.67.10.219) on 2009-07-05 10:33