A-AA+then

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

2,390
    ผมสร้างโฟลเดอร์ชื่อ 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/
    ต้องแก้ตรงไหนหรอครับ ช่วยชี้แจงทางสว่างให้ผมที
     

7 ความคิดเห็น

ถ้าใช้ 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
^