การเขียนโค้ดเล็กน้อยให้ URL Friendly ด้วย .htaccess ภาคที่ 2
posted on 13 Feb 2009 10:17 by laptopcomputer in Tips-Tricks
เอาละครับจากที่เขียน .htaccess ไฟล์เดียวทำงานได้หมด โดยการ get segment ซึ่งเป็นวิธีการเขียนให้ทุก url วิ่งเข้าหา index ทั้งหมดแล้วเอา segment มาใช้งาน
ทีนี้เราจะมาลองเขียนตรงข้าม คือ แทนที่จะเรียกทุก url เข้าหา index เราจะใช้การเขียน .htaccess เพื่อทำการ remove index ออกแทน เพื่อจะได้ url สวยๆ ลองมาดูกันเลยครับ
index.php
- <?php
- //ตั้งค่า url ที่จะให้วิ่งหา ท่าจะแก้ต้องแก้ .htaccess ด้วย
- $page_index = "index.php";
- //หาค่า root folder ที่รันโปรแกรมออกมา
- DEFINE('BASE', preg_replace('#'.getenv('DOCUMENT_ROOT').'#', '', str_replace(array('\\', $page_index), array('/', ''), __FILE__)));
- //เอาค่า root folder ไป replace กับ uri ทั้งหมดที่ get ได้
- DEFINE('TAILER', preg_replace('#'.BASE.'#', '', getenv('REQUEST_URI')));
- //แยก path กับ query string ออกมาใช้งาน
- $parse_url = parse_url(TAILER);
- //explode url ที่ตำแหน่ง / เพื่อกำหนด segment
- $uri = explode("/", $parse_url['path']);
- //parse ค่าของ query string เพื่อให้กลับมาใช้งานได้ตามปกติ
- parse_str($parse_url['query']);
- //ทดสอบ print segment แต่ละตำแหน่งออกมา
- echo "<pre>";
- print_r($uri);
- echo "<pre>";
- //ทดสอบว่า query string ใช้งานได้ตามปกติ
- echo "<hr />";
- echo "<strong>Author:</strong> ".$_GET['author'];
- ?>
.htaccess
- RewriteEngine on
- RewriteCond $1 !^(index\.php|images)
- 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
เช่น
- <?php
- if (file_exists($uri[0]))
- {
- //include ไฟล์ที่มี class ของ module นี้เข้ามา
- require_once($uri[0]);
- if (class_exists($uri[0]))
- {
- //สร้าง new object
- $obj = new $uri[0];
- if (method_exists($uri[1]))
- {
- //slice class กับ method ออกไป
- $uri_slice = array_slice($uri, 2);
- $params = array();
- //จับ uri ตั้งแต่ segment ที่ 2 มา merge ใน array (เพราะ 0 กับ 1 คือ class กับ method ที่เอาออกไปแล้ว)
- $params = array_merge($params, $uri_slice);
- //เรียก method ใน object รวมทั้งส่ง parameters ที่เป็น array ไปด้วย (ถ้ามี)
- $obj->$uri[1]($params);
- }
- }
- }
- ?>
แต่ถ้าไม่ถนัดการเขียนโคดแบบ oop ก็ใช้วิธีง่ายๆคือ
- <?php
- if ($uri[0] == 'module')
- {
- require_once('module.php');
- }
- ?>
แล้วไปทำงานต่อใน module.php เช่น
- <?php
- if($uri[1] == 'addnew')
- {
- //โคดโลด
- }
- ?>
อ่านบทความที่แล้ว >> การเขียนโค้ดเล็กน้อยให้ URL Friendly ด้วย .htaccess ภาคที่ 1
บทความจาก http://www.naitam.com/naitam-webdesign/view.php?id=14
Tags: apache, mod rewrite, module, url friendly0 Comments