mod rewrite สักนิดครับ มันไม่ไปตามที่เราต้องการ
ผมสร้างโฟลเดอร์ชื่อ rewrite พร้อมมี .htaccess ไว้ในโฟลเดอร์ และไฟล์ index.php
ในไฟล์ .htaccess มีดังนี้
Options +FollowSymlinks
RewriteEngine on
RewriteBase /rewrite/
RewriteCond %{HTTP_HOST} ^localhost$
RewriteRule ^index\.php$ index.php?module=main [L,QSA]
ผมอยากให้มันตอนที่เข้าหน้า index.php ให้มันโชว์ url
http://localhost/...ndex.php?module=main
แต่อ url ที่ผมรัน ขึ้น http://localhost/rewrite/
ต้องแก้ตรงไหนหรอครับ ช่วยชี้แจงทางสว่างให้ผมที
ถ้าต้องการให้เปลี่ยนเส้นทางไปเลย ใช้ R,L ครับ
RewriteRule ^index\.php$ /index.php?module=main [R,L]
Options +FollowSymlinks
RewriteEngine on
RewriteBase /rewrite/
RewriteCond %{HTTP_HOST} ^localhost$
RewriteRule ^index\.php$ /index.php?module=main [R,L]
ข้อมูลใน index.php ไม่ขึ้นครับ
สามารถตรวจสอบได้โดยพิมพ์ print_r($_GET); ในไฟล์ index.php เพื่อดูว่ามันมาที่นั่นหรือเปล่าครับ
ไฟล์ .htaccess
Options +FollowSymlinks
RewriteEngine on
RewriteBase /rewrite/
RewriteCond %{HTTP_HOST} ^localhost$
RewriteRule ^index\.php$ index.php?module=main [R,L]
ไฟล์ index.php
<?php
print_r($_GET);
?>
อยู่ในโฟลเดอร์ rewrite ทั้งหมด
พิมพ์ url นี้ http://localhost/rewrite/index.php
มันก้อเปลี่ยนเส้นทางไป http://localhost/rewrite/index.php?module=main
แล้วมันก็ขึ้นดังภาพ
ปัญหาก็คือ มันเปลี่ยนเส้นทางไปยังไฟล์เดิม ดังนั้นมันจึงมี loop ไม่สิ้นสุด index.php => index.php?module=main => index.php?module=main
การแก้ไข...ผมก็ไม่แน่ใจเหมือนกันว่าคำสั่งที่จะทำให้มันหยุด loop คืออะไร จริงๆก็น่าจะประมาณว่า ให้ตรวจสอบว่า module เท่ากับ main ไม่ต้อง redirect แต่....
ปัญหาก็คือถ้าเธอทำเช่นนั้นก็น่าจะมีปัญหาอีกมากมายตามมา เพราะ เธออาจไม่ได้ใช้แค่ module=main อาจมี parameter อื่นๆอีกได้ ซึ่งวิธีข้างต้นจะไม่ครอบคลุม
จริงๆแล้วเราสามารถทำคำสั่งดังกล่าวด้วย PHP แทนได้ โดยไม่จำเป็นต้อง redirect
<?php
// index.php
$module = isset($_GET['module']) ? $_GET['module'] : 'main';
?>
คำสั่งด้านบนหมายความว่า ถ้าไม่มีค่า module ส่งมา ให้ใช้ module=main และ แน่นอน เราสามารถส่งค่าโมดูลเป็นค่าอื่นๆได้ด้วย โดยไม่จำเป็นต้อง redirect
ที่ทำได้ตอนนี้คือสามารถเปลี่ยนเป็น http://localhost/rewrite/?module=main
แล้วถ้าอยากได้เป็นอย่างนี้ล่ะครับ http://localhost/rewrite/#module=main ผมเห็นว่ามันสวยกว่าเลยอยากได้ครับ
ไฟล์ .htaccess
Options +FollowSymlinks
RewriteEngine on
RewriteBase /rewrite/
RewriteCond %{HTTP_HOST} ^localhost$
RewriteRule ^index\.php$ ?module=main [R,L]
อยากเปลี่ยน เครื่องหมาย ? เป็น # ครับ
555++ คำตอบง่ายๆ คือใช้ GCMS ครับ
วิธีของมันจริงๆถ้าจะอธิบายก็เขียนหนังสือได้เป็นเล่มๆละครับ คงยังไม่สะดวกจะอธิบายในตอนนี้ เอาคร่าวๆว่ามันเกี่ยวข้องกับ GAjax (Ajax FrameWork) และอีกหลายๆสิ่งครับ
จริงๆแล้วก็มี FrameWork อื่นๆเช่น jquery ที่สามารถใช้ความสามารถลักษณะนี้ครับ แต่ก็ไม่ง่ายนักที่จะทำให้เสมบูรณ์
ผมว่า วิธีที่ตั้งใจไว้แหละครับ ง่ายสุด เพียงแต่เธออาจยังไม่เข้าใจว่า mod_rewrute มันทำอะไร เธอถึงได้ใช้ไม่ถูก แนะนำให้อ่านบทความบนเว็บประกอบครับ