CodeIgniter การลบ index.php และการใช้งาน URI Routing

php framework CodeIgniter

ในการใช้ CodeIgniter Framework php ในการพัฒนาเว็บนั้นหากไม่มีการ config เพิ่มเติมนั้นมันจะมีการใช้ index.php ใน url ที่เรียกใช้ controller หากใช้งานเป็น web application ทั่วไปมันคงไม่มีปัญหาอะไรแต่หากทำเป็นเว็บไซด์แล้วมันจะมีปัญหาส่งผลต่อกการ index url ของ google หรือการทำ SEO นั้นเองโดยขั้นตอนการเอา index.php ออกมีขั้นตอนดังนี้ โดยเริ่มแรกนั้นผมจะโดย CodeIgniter เริ่มแรกมาโดยไม่ทำการ config ใดๆเลยแล้วนำไปตั้งบน Web Server ซึ่งในเครื่องของผมนั้นจะใช้ Appserv เพราะมันง่ายสุดสำหรับการใช้งาน โดยผมนำไปวางไว้แล้วตั้งชื่อ folder ว่า code

php framework CodeIgniter

เมื่อลองเรียก url ดูโดยใช้ url ที่มี index.php ซึ่ง Controller default นั้นจะเป็น Welcome

php framework CodeIgniter

แต่เมื่อลองเรียก URL ที่ไม่มี index.php นั้นจะได้ดังรูปคือไม่เจอหน้าเพจที่ต้องการนั้นเอง

php framework CodeIgniter

ที่นี้มาถึงขั้นตอนการเอา index.php ออกกัน โดยเริ่มที่การสร้างไฟล์ .htaccess ใน directory นอกสุดของ codeIgniter

php framework CodeIgniter

โดยภายในต้องกำหนด กฏการ mod rewrite แต่ขอสำคัญต้องแน่ใจว่า Web Server ที่เราใช้งานนั้นต้อง enable mod rewrite ซะก่อน

โดยกำหนดกฏการ mod rewrite เป็นดังนี้

RewriteEngine on
RewriteCond $1 !^(index\.php|resources|images|robots\.txt\.jpg)
RewriteCond %{REQUEST_URI} !\.(jpg|png|css|js)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

เมื่อใส่ข้อมูลในไฟล์ .htaccess เสร็จแล้วก็ให้ไปกำหนดไฟล์ config.php ใน directory application\config

php framework CodeIgniter

php framework CodeIgniter

โดยให้เปลี่ยน $config[‘index_page’] = ‘index.php’ ให้เป็นดังรูป คือเอา index.php ออก จากนั้นก็เปลี่ยน $config[‘uri_protocol’] เป็น REQUEST_URI จากนั้นก็เซฟแล้วลองไปเรียก URL ที่ไม่มี index.php ดู

php framework CodeIgniter

สามารถเรียกได้แล้วครับที่นี้ก็มาทำ URI route เพื่อให้สามารถทำให้ URL เว็บของเรามี keyword ที่ต้องการแล้วก็มี parameter ที่เราต้องใช้ในการดึงข้อมูลจากฐานข้อมูลได้ โดยเราสามารถกำหนดได้ในไฟล์ routes.php ใน application\config

php framework CodeIgniter

โดยผมกำหนด เพิ่ม $route[‘products/([a-z]+)/(\d+)’] = “main/testroute/$2”;

php framework CodeIgniter

ความหมายของมันก็คือถ้ามีการเรียก URL เป็น base_url/products/ตัวอักษร a-z/แล้วก็ตัวเลข มันจะมีการไปเรียกใช้งาน controller main ฟังก์ชัน testroute หรือง่ายๆคือมันจะเปลี่ยนไปเรียก url base_url/main/testroute/ตัวเลขที่ส่งมานั้นเอง ที่นี้ก่อนที่เราจะไปทดสอบนั้นเราก็ต้องไปเขียน function testroute ใน controller main ก่อนโดยผมทำการ copy ไฟล์ welcome.php แล้วเปลี่ยนชื่อ class เป็น Main แล้วไฟล์ก็ชื่อ main.php

php framework CodeIgniter

[sourcecode language=”php”]


* @see http://codeigniter.com/user_guide/general/urls.html
*/
public function index()
{
$this->load->view(‘welcome_message’);
}

public function testroute()
{
echo “testroute
“;
echo $this->uri->segment(3);
}
}

/* End of file welcome.php */
/* Location: ./application/controllers/welcome.php */

[/sourcecode]

เมื่อลองเรียก URL http://localhost/code/products/xxxx/1

php framework CodeIgniter

ซึ่งจากโค้ดใน function testroute ที่เมื่อเรียก url products/xxxx/1 มันจะตรงตามกฏใน route มันก็จะเรียกใช้งาน function testroute ใน controller main ซึ่งจะเห็นว่า xxxx นั้นอาจมีค่าหรือไม่ก็ได้ในการดึงฐานข้อมูลแล้วเรายังสามารถส่งค่า 1 เข้าไปได้เพื่อใช้ในกรณีของ id นั้นเองส่วน xxx นั้นก็จะเป็น Keyword เพื่อการทำ SEO นั้นเอง

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *