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/rewrite/index.php?module=main

    แต่อ url ที่ผมรัน ขึ้น http://localhost/rewrite/

    ต้องแก้ตรงไหนหรอครับ ช่วยชี้แจงทางสว่างให้ผมที

     

15 ก.ค. 2555 เวลา 18:12 น. 7 2,433

ถ้าใช้ L,QSA บน addressbar จะเหมือนเดิม แต่มีค่า module ส่งไป



ถ้าต้องการให้เปลี่ยนเส้นทางไปเลย ใช้ R,L ครับ



RewriteRule ^index\.php$ /index.php?module=main [R,L]

#1


    Options +FollowSymlinks


    RewriteEngine on


    RewriteBase /rewrite/


     


    RewriteCond %{HTTP_HOST} ^localhost$


    RewriteRule ^index\.php$ /index.php?module=main [R,L]


    

    ข้อมูลใน index.php ไม่ขึ้นครับ

#2

มันไป index..php หรือเปล่าละ



สามารถตรวจสอบได้โดยพิมพ์ print_r($_GET); ในไฟล์ index.php เพื่อดูว่ามันมาที่นั่นหรือเปล่าครับ
#3

mod rewrite สักนิดครับ มันไม่ไปตามที่เราต้องการ
ไม่ได้ครับ 

ไฟล์ .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

        แล้วมันก็ขึ้นดังภาพ




#4

ออ....ไม่ต้องแปลกใจ



ปัญหาก็คือ มันเปลี่ยนเส้นทางไปยังไฟล์เดิม ดังนั้นมันจึงมี 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
#5

แล้วถ้าจะเปลี่ยนไปคล้ายเว็บอาจารย์ล่ะครับ การทำงานมันเป็นยังงัยครับ

ที่ทำได้ตอนนี้คือสามารถเปลี่ยนเป็น 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]

    อยากเปลี่ยน เครื่องหมาย ? เป็น # ครับ 

#6

อ้างอิงจาก ความคิดเห็น #6แล้วถ้าจะเปลี่ยนไปคล้ายเว็บอาจารย์ล่ะครับ การทำงานมันเป็นยังงัยครับ

ที่ทำได้ตอนนี้คือสามารถเปลี่ยนเป็น 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 มันทำอะไร เธอถึงได้ใช้ไม่ถูก แนะนำให้อ่านบทความบนเว็บประกอบครับ
#7
ความคิดเห็น
ไฟล์อัปโหลด ชนิด jpg, jpeg ขนาดไฟล์ไม่เกิน 1024
^