เรื่องนี้เป็นเรื่องที่ผมกำลังสนใจมากที่สุดในตอนนี้ จึงอยากนำมาให้เพื่อน ๆ ได้อ่านกันบ้างเผื่อว่าจะได้แนะนำผมบ้าง ต้องยอมรับจริง ๆ ว่าทำเว็บไซต์มาไม่เคยนึกในจุดนี้เลย นานมาแล้วได้เข้าไปอ่านในไทยเสียวบอร์ด(thaiseoboard) แล้วเกิดว่าชอบ และมีประโยชน์มาก จึงอยากทำบ้างก็เลยหาข้อมูลในเรื่องนี้อยู่(ยังทำไม่เป็นเลย) เพื่อนๆ คนไหนที่มีความรู้ด้านนี้ก็ช่วยอนุเคราะห์หน่อยนะครับ



หลายๆ คนคงรู้จักกับ mod_rewrite ซึ่งเป็น module ของ apache ซึ่งตัวนี้น่ะ มันมีประโยชน์ค่อนข้างมากในการทำ url friendly เพื่อให้ google รัก yahoo หลง

ซึ่งโปรแกรม หลายคนอาจจะเขียนตรงๆ ไปเลยเช่น

  1. RewriteCond %{REQUEST_FILENAME} !-f   
  2. RewriteCond %{REQUEST_FILENAME} !-d   
  3. RewriteRule ^tag\/([^\?].*)$ n5-tag.php?tag=$1 [L]  

แบบนี้ แล้วทีนี้ถ้าเวบเรามีขนาดใหญ่ module เป็นร้อยๆ ไฟล์ .htaccess ของรามีหวังยาวเป็น ร้อยๆ บรรทัดเป็นแน่ เอางี้ดีกว่าลองมาทำตามวิธีผม ไฟล์เดียวครอบจักรวาล

1. ไฟล์ .htaccess

  1. RewriteEngine On   
  2. RewriteCond %{REQUEST_FILENAME} -f [OR]   
  3. RewriteCond %{REQUEST_FILENAME} -d   
  4. RewriteRule ^(.+) - [PT,L]   
  5. RewriteRule ^(.*) index.php  

จบแล้วครับไฟล์ .htaccess เราใช้แค่นี้ คือบอกมันว่า "ไม่ว่าจะเจออะไร วิ่งมาที่ index.php ให้หมดเลยนะ"

2. ไฟล์ common.inc.php

  1. // Relative path   
  2. $conf['dir'] = str_replace('\\', '/', dirname(__FILE__));  
  3. // Absolute path  
  4. $conf['path'] = "http://".$_SERVER['SERVER_NAME'].str_replace($_SERVER['DOCUMENT_ROOT'], '', $conf['dir']);  
  5. // uri แบบที่ตัด root folder ออก  
  6. $conf['uri'] = str_replace($conf['dir'].'/', '', $_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI']);  
  7. // explode เพื่อตัดข้อมูลหลังจาก ? ออกไป  
  8. list($xuri) = explode('?', $conf['uri'], 2);   
  9. // explode เพื่อสร้าง array โดยการ แยก ที่ตำแหน่ง /   
  10. $uri = explode("/"$xuri);  

ส่วนนี้เป็นการเอา absolute path มาแยกออกเป็น array เพื่อที่จะนำไปใช้

3. ไฟล์ index.php

  1. require('common.inc.php');   
  2. // ถ้าไม่เจอข้อมูลอะไรให้เรียก home/ เป็น default   
  3. $loadmodule = ($uri[0]) ? $uri[0] : 'home';   
  4. $inc = 'modules/'.$loadmodule;   
  5. // เช็คดูว่าถ้ามี module นี้จริงๆ ให้ include เข้ามา   
  6. if (is_dir($inc)) {   
  7.     include($inc.'/compile.php');   
  8. }  

ไฟล์เรียกใช้งานโดยมีการ inc common.inc.php เข้ามาใช้ ทีนี้เราก็สามารถเอา array ต่างๆ ไปเรียกใช้ได้ตามสะดวกแล้วครับ เช่น

http://www.domain.com/blog/tee/addnew

แบบนี้เราก็จะได้ array ออกมา 3 ชุดคือ

$uri[0] จะได้ blog
$uri[1] จะได้ tee
$uri[2] จะได้ addnew

ซึ่งพวกนี้เราสามารถนำไปใช้ใน เงื่อนไข ได้ตามปกติเลย เช่น

  1. if ($uri[0] == 'blog') {   
  2.     //load blog module   
  3.     include('modules/blog/compile.php');   
  4. }  

แล้วใน modules/blog/compile.php เรายังสามารถเรียก action ต่างๆ ได้อีกเช่น

  1. switch($uri[2]) {   
  2.     case 'addnew' :   
  3.         // do something   
  4.     break;   
  5.     default :   
  6.        // do somthing else   
  7.     break;   
  8. }  

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

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

Comment



smilebig smileopen-mounthed smileconfused smilesad smileangry smiletonguequestionembarrassedsurprised smilewinkdouble winkcry

Tweet

มีประโยชน์มากเลย ต้องลองเอาไปใช้ดู confused smile

#1 By โปรโมทเว็บฟรี (115.67.10.219) on 2009-07-05 10:33