เปิด Apache mod_rewrite และตัด index.php


หน้าแรก SEO เปิด Apache mod_rewrite และตัด index.php
CI ย่อมาจาก Codeigniter เป็น PHP Framework ตัวหนึ่งที่ศึกษาไม่ยาก ผมก็เพิ่งมาเล่นจริงๆจังๆเมื่อไม่นานนี้เอง

สำหรับการติดตั้งคงไม่สอน เพราะมีคนเขียนไว้เยอะแล้ว แต่วันนี้ผมจะมาสอนวิธีการเปิด Apache mod_rewrite และตัด index.php

ในที่นี้ผมจะใช้ Xampp 1.7.7 เป็น Web Server นะครับ เนื่องจากมันติดตั้งง่าย และอันที่จริงมันเปิด mod_rewrite มาให้เราเรียบร้อยแล้วหละ แต่เพื่อความแน่ใจ เราจะมาดูกันว่าจะตรวจสอบและเปิดใช้งาน mod_rewrite ยังไง

เปิด apache mod_rewrite

ไปที่ C:xamppapacheconfhttpd.conf เปิดไฟล์ด้วย Text Editor แล้วค้นหา



  Code
LoadModule rewrite_module modules/mod_rewrite.so


ให้เอา # ข้างหน้าออก

ต่อมาให้ค้นหา AllowOverride แล้วให้แก้เป็น



  Code
<Directory />
AllowOverride All
Order deny,allow
Deny from all
</Directory>


ทำการ restart apache และสร้างไฟล์ check_apache.php เพื่อตรวจสอบว่า apache ได้เปิดโมดูลอะไรแล้วบ้าง โดยเขียนว่า



  Code
<?php
print_r(apache_get_modules());
?>


ตรวจสอบว่ามีคำว่า mod_rewrite ไหม ถ้ามีก็แสดงว่าได้เปิดใช้งานแล้ว
สรุปว่าวิธีการก็แค่หาไฟล์ httpd.conf แล้วแก้ให้ถูกต้อง เท่านั้นเอง

ตัด index.php ใน CI

ในการพัฒนาเว็บแอพด้วย CI เราจะเรียกด้วย http://localhost/controller/method/id ถ้าเราไม่ตัดออก เราก็ต้องเรียกด้วย http://localhost/index.php/controller/method/id ซึ่งจะเห็นว่ามันเกะกะ บางทีก็ทำเราสับสนเวลาเขียน สรุปว่าเอาออกไปดีกว่า

เริ่มจากสร้างไฟล์ .htaccess ไว้ที่ root directory ของ CI เรา อย่างเช่นในรูป
CI directory structure

แล้วเขียนในไฟล์ประมาณนี้



  Code
RewriteEngine On
RewriteBase /CI/test212/
RewriteCond $1 !^(index.php|css|images|javascript)
RewriteRule ^(.*)$ index.php/$1 [L]



อันนี้ผมยกตัวอย่างของผมนะครับ จะอธิบายทีละบรรทัด
RewriteEngine = เปิดใช้ Rewrite
RewriteBase = base directory ที่เราจะทำ mod_rewrite ตรงนี้แหละครับทีสำคัญ จากตัวอย่างจะเห็นได้ว่ามี sub directory /CI/test212/ ที่ผมมีเนื่องจากผมลองทำใน localhost ของผม เวลาเรียกก็เรียก http://localhost/CI/test212 ครับ แต่เวลาขึ้นเว็บจริงเราจะไม่มี sub directory นะครับ ตรงนี้ก็จะเหลือแค่ RewriteBase / ครับ
RewriteCond = เป็นที่กำหนดว่าเราจะให้ mod_rewrite ข้ามอ่านไฟล์ชนิดไหนบ้าง
RewriteRule = กฏที่จะกำหนดให้ตัด index.php

เสร็จแล้วลองทดสอบเรียกโดยไปสร้าง method อะไรก็ได้ใน application/controllers/welcome.php ในทีนี้ผมจะสร้าง



  Code
function test_url()
{
echo "Success";
}


แล้วทดสอบเรียก http://localhost/welcome/test_url ดู ถ้าสำเร็จ จะแสดงข้อความ Success ออกมา
ซึ่งถ้าปกติถ้าเราไม่ตัดออก จะต้องเรียก http://localhost/index.php/welcome/test_url

ลองทำดูครับ คราวหน้าผมจะมา Workshop ง่ายประสา CI+Smarty2 กัน

refer: http://autthapon.wordpress.com/2012/09/04/ci-for-beginner-%E0%B9%80%E0%B8%9B%E0%B8%B4%E0%B8%94-apache-mod_rewrite-%E0%B9%81%E0%B8%A5%E0%B8%B0%E0%B8%95%E0%B8%B1%E0%B8%94-index-php/

ขึ้นไปด้านบน