Powered By Blogger

04 April 2011

การ Set Mod_rewrite ใน CodeIgniter , Apache Web Server

Set  mod_rewrite ดังนี้
http://codeigniter.com/wiki/mod_rewrite/
โดย

ปรับแก้ Apache2.2/conf/httpd.conf
แก้ประมาณบรรทัดที่  196
(ดูได้ดังนี้ )

C:\AppServ\Apache2.2\conf>type httpd.conf | findstr /i /n rewrite
196:LoadModule rewrite_module modules/mod_rewrite.so

โดยเอา # หน้าบรรทัดออก ถ้ามี# อยู่

ต้องสร้าง .htaccess ไว้ที่ path บนสุดของ  CodeIgniter  ( ถ้า unzip มาใหม่ๆจะเห็น folder ที่ยังไม่มี .htaccss )
 RewriteBase / จะเป็น  Path ของเราเองเช่น  
    RewriteBase /CodeIgniter_2.0.1/
แล้ว แก้ไข  / config.php ไฟล์
28  $config['index_page'] = '';
48 $config['uri_protocol'] = 'QUERY_STRING' ; 
160 $config['enable_query_strings'] = TRUE;


----------------
เมื่อติดตั้งแล้ว restart apache2.2 ใหม่

แล้วลองรันดูจะเห็นว่าไม่ต้องมี index.php แล้ว  
แต่ว่า  $_GET จะได้เป็น 
Array ( [/auth/check] => ) 
ซึ่งจะพบว่า ไม่สามารถใช้งาน $_GET ได้   
(ซึ่งก่อนหน้าติดตั้ง mod_rewrite และใช้  .htaccess จะยังสามารถใช้  $_GET ได้ปกติ
แต่ url จะเป็น 

-------------------------------------------------------------------------------------


หากต้องการ $_GET ใน Controller ให้ สร้าง $_GET โดย Parse QueryString ดังนี้ 
จาก link จะเห็นว่ามีเขียนว่า 100% 
นั่นคือใช้ 

parse_str(substr(strrchr($_SERVER['REQUEST_URI'], "?"), 1), $_GET);

ตัวอย่างเช่น ใน Controller auth
public function check()
{
print_r($_GET);
echo "
";
print_r($_SERVER['REQUEST_URI']);
parse_str($_SERVER['REQUEST_URI'], $_GET);
echo "
";
print_r($_GET);
parse_str(substr(strrchr($_SERVER['REQUEST_URI'], "?"), 1), $_GET);
echo "
";
print_r($_GET);
}
จะได้ผล ดังนี้ 
Array ( [/auth/check] => )
/codeIgniter_2.0.1/auth/check?user=bb&pass=vc
Array ( [/codeIgniter_2_0_1/auth/check?user] => bb [pass] => vc )
Array ( [user] => bb [pass] => vc )

=================================================================
NOTE: 
HTML Form ที่เรียกใช้  URL จะเป็นดังนี้ 
กรณี ไม่ได้ใช้ mod_rewrite 

กรณีมีการติดตั้ง mod_rewrite และ แก้ไข config.php แล้ว 





No comments: