ปัญหาการใช้ mod_rewrite
อ้างอิงจาก หัวข้อพอดีกำลังหัดเขียน Mod_rewrite ค่ะติดปัญหาตรงตอนลิงค์แล้ว url มันไม่เปลี่ยนค่ะคือมันต่อกันเลยค่ะอันนี้ตัวอย่างค่ะ
ไฟล์ชื่อ index.php
<a href="category/icon/car/">Link 1 </a><br>
<a href="write/picture/home/">Link 2 </a><br />
<strong> แสดง ผล :<? echo $_GET['a']."-".$_GET['b']."-".$_GET['c'] ;?></strong>
ไฟล์ .htaccess
RewriteEngine on
RewriteRule ^([^/\.]+)/([^/\.]+)/([^/\.]+)/?$ index.php?a=&b=&c= [L]
พอเรา คลิกลิงค์ที่ 1 ได้นะค่ะ
/category/icon/car/
แต่พอจะคลิก ลิงค์ที่1หรือ2 อีกทีมันจะขึ้นแบบนี้ค่ะคือมันจะต่อกันไปเรื่อยๆค่ะ
/category/icon/car/write/picture/home/
คำถามนี้ค่อนข้างเป็นปัญหาหญ้าปากคอกครับ เนื่องจากคำถามนี้ หลายๆคนคงพยายามไปแก้ไขที่ตัว mod_rewrite ต่างๆนาๆ และโทษว่ามันผิด ทั้งๆที่อันที่จริงแล้ว ที่ผิดอยู่ที่คนเขียนไม่รอบคอบครับ และไม่ได้อยู่ที่ mod_rewrite
อย่างที่ผมบอก ปัญหานี้ไม่ได้เกิดจาก mod_rewrite แก้ให้ตายมันก็ไม่หมดปัญหา แต่ปัญหามันไปอยู่ที่ ลิงค์ที่ใช้ครับ
<a href="category/icon/car/">Link 1 </a>
<a href="write/picture/home/">Link 2 </a>
ดูเผินๆมันก็ไม่มีอะไรนะครับ แต่จะว่าไป มันก็ไม่ค่อยถูกกฏซะเท่าไร ลอง alert ลิงค์แรกออกมาดูนะครับ
<script type="text/javascript">
alert(document.links[0].href );
</script>
คำตอบอยู่ที่ การเขียนลิงค์ครับ <a href="category/icon/car/">Link 1 </a> เมื่อคุณไม่ได้ระบุ URL แบบเต็มๆ tag a จะไปเอา URL มาจาก Address Bar มาต่อกับ path หรือไฟล์ตามที่ tag ระบุไว้ ซึ่งนั่นจะกลายเป็น http://localhost/category/icon/car/category/icon/car/ สีแดง คือ URL บน Address Bar (ไม่รวมชื่อไฟล์ ถ้ามี เช่น index.php) และ สีเขียว คือ URL ที่ระบุใน tag
การแก้ไขก็ตรงไปตรงมาครับ ระบุ URL เต็มๆลงใน tag ก็เสร็จแล้ว
<a href="http://localhost/category/icon/car/">Link 1 </a>
<a href="http://localhost/write/picture/home/">Link 2 </a>
ปัญหานี้เป็นสิ่งที่อาจเกิดขึ้นได้เสมอ เมื่อมีการใช้ mod_rewrite ครับ เนื่องจาก Browser จะเอา URL มาจาก Address Bar เสมอหากไม่ระบุ URL แบบครบถ้วนมา ซึ่งไม่ได้มีเพียงแค่นี้นะครับ tag อื่นๆก็เป็นไปตามกฏนี้ด้วยเช่นกัน เช่น tag img หรือ style หรืออะไรก็ตามที่มีการอ้างที่อยู่ของไฟล์ ดังนั้นเพื่อความปลอดภัย หากเราใช้ mod_rewrite เมื่อไร เราควรเขียน URL ต่างๆ (ทั้งหมด) บนเว็บของเราโดยระบุ URL แบบเต็มๆไปยังไฟล์เสมอ (หรือเพื่อให้เป็นนิสัยที่ดี เราควร ระบุที่อยู่ของไฟล์ แบบเต็มๆเสมอ)