เอาละครับจากที่เขียน .htaccess ไฟล์เดียวทำงานได้หมด โดยการ get segment ซึ่งเป็นวิธีการเขียนให้ทุก url วิ่งเข้าหา index ทั้งหมดแล้วเอา segment มาใช้งาน

ทีนี้เราจะมาลองเขียนตรงข้าม คือ แทนที่จะเรียกทุก url เข้าหา index เราจะใช้การเขียน .htaccess เพื่อทำการ remove index ออกแทน เพื่อจะได้ url สวยๆ ลองมาดูกันเลยครับ

index.php
  1. <?php   
  2. //ตั้งค่า url ที่จะให้วิ่งหา ท่าจะแก้ต้องแก้ .htaccess ด้วย   
  3. $page_index = "index.php";    
  4. //หาค่า root folder ที่รันโปรแกรมออกมา   
  5. DEFINE('BASE', preg_replace('#'.getenv('DOCUMENT_ROOT').'#'''str_replace(array('\\', $page_index), array('/', ''), __FILE__)));   
  6. //เอาค่า root folder ไป replace กับ uri ทั้งหมดที่ get ได้  
  7. DEFINE('TAILER', preg_replace('#'.BASE.'#', '', getenv('REQUEST_URI')));  
  8. //แยก path กับ query string ออกมาใช้งาน  
  9. $parse_url = parse_url(TAILER);  
  10. //explode url ที่ตำแหน่ง / เพื่อกำหนด segment  
  11. $uri = explode("/", $parse_url['path']);  
  12. //parse ค่าของ query string เพื่อให้กลับมาใช้งานได้ตามปกติ  
  13. parse_str($parse_url['query']);  
  14. //ทดสอบ print segment แต่ละตำแหน่งออกมา  
  15. echo "<pre>";  
  16. print_r($uri);  
  17. echo "<pre>";  
  18. //ทดสอบว่า query string ใช้งานได้ตามปกติ  
  19. echo "<hr />";  
  20. echo "<strong>Author:</strong> ".$_GET['author'];   
  21. ?>  

.htaccess
  1. RewriteEngine on   
  2. RewriteCond $1 !^(index\.php|images)   
  3. RewriteRule ^(.*)$ index.php/$1 [L]  

----------------------------------------------------------
ตามตัวอย่างข้างบนถ้าผมลองเขียน url แบบนี้
http://www.localhost.com/book/computer/seo_friendly?author=Tee

ตำแหน่งของ segment ที่ผมจะได้ก็คือ

segment ที่ 0 = book
segment ที่ 1 = computer
segment ที่ 2 = seo_friendly

โดยที่ query string ผมก้ยังให้ค่าตามปกติคือ

$author จะให้ค่า Tee ออกมา

เท่านี้เองก็จะได้ url สวยๆ แบบง่ายๆ แล้ว 
----------------------------------------------------------
การประยุกต์เพื่อการใช้งาน

สมมุติเราทำตามข้างบนเสร็จแล้ว url จะวิ่งเข้าไปที่  index.php หมดเลย ซึ่งตามปกติ segment ต่างๆควรจะเรียงตามนี้ครับ

$uri[0] = include and new opj
$url[1] = method
$url[2] or more = parameters

เช่น
  1. <?php   
  2. if (file_exists($uri[0]))   
  3. {   
  4.   //include ไฟล์ที่มี class ของ module นี้เข้ามา   
  5.   require_once($uri[0]);   
  6.   if (class_exists($uri[0]))   
  7.   {   
  8.     //สร้าง new object   
  9.     $obj = new $uri[0];   
  10.     if (method_exists($uri[1]))   
  11.     {   
  12.        //slice class กับ method ออกไป   
  13.        $uri_slice = array_slice($uri, 2);    
  14.        $params = array();   
  15.           
  16.        //จับ uri ตั้งแต่ segment ที่ 2 มา merge ใน array (เพราะ 0 กับ 1 คือ class กับ method ที่เอาออกไปแล้ว)   
  17.        $params = array_merge($params$uri_slice);    
  18.           
  19.        //เรียก method ใน object รวมทั้งส่ง parameters ที่เป็น array ไปด้วย (ถ้ามี)   
  20.        $obj->$uri[1]($params);    
  21.     }   
  22.   }   
  23. }   
  24. ?>  

แต่ถ้าไม่ถนัดการเขียนโคดแบบ oop ก็ใช้วิธีง่ายๆคือ

  1. <?php   
  2. if ($uri[0] == 'module')   
  3. {   
  4.   require_once('module.php');   
  5. }   
  6. ?>  

แล้วไปทำงานต่อใน module.php เช่น

  1. <?php   
  2. if($uri[1] == 'addnew')   
  3. {   
  4.   //โคดโลด   
  5. }   
  6. ?>  

อ่านบทความที่แล้ว >> การเขียนโค้ดเล็กน้อยให้ URL Friendly ด้วย .htaccess ภาคที่ 1

บทความจาก http://www.naitam.com/naitam-webdesign/view.php?id=14

Comment



smilebig smileopen-mounthed smileconfused smilesad smileangry smiletonguequestionembarrassedsurprised smilewinkdouble winkcry

Tweet