การกำหนดเส้นทาง URI
แบบปกติแล้วเป็นแบบ 1 ต่อ 1 โดยเป็นความสัมพันธ์ระหว่าง URL ซึ่งสอดคล้องกับ ชื่อคลาส (class) หรือเมธอด (method) ของตัวควบคุม (controller) โดยส่วนต่างๆของ URI จะเป็นตามแบบนี้
example.com/class/function/id/
โดยในบางสิ่งคุณอาจจะอยากเปลี่ยนการเชื่อมความสัมพันธ์ในต่างคลาสหรือฟังก์ชัน โดยสามารถถูกเรียกแทนเพื่อให้สอดคล้องกับ URL ได้
ตัวอย่างเช่น, คุณบอกว่าคุณต้องการต้นแบบ URLs แบบนี้:
example.com/product/1/
example.com/product/2/
example.com/product/3/
example.com/product/4/
โดยปกติแล้วส่วนที่สองนั้นเป็น URL สำหรับชื่อฟังก์ชัน แต่ในตัวอย่างมันเป็น ID ของสินค้า ในการที่จะพิชิตสิ่งนี้ CodeIgniter ยอมให้คุณปรับเปลี่ยนการจัดการ URI ได้
กำหนดกฎเส้นทางของคุณเอง
กฎเส้นทางถูกทำไว้ในไฟล์ application/config/routes.php ที่นั้นคุณจะเห็นอาเรย์ที่เรียกว่า $route ซึ่งยินยอมให้คุณกำหนดกฎเกณฑ์ของเส้นทางของคุณเองได้ เส้นทางยังสามารถถูกกำหนดได้ด้วย สัญลักษณ์ตัวแทน(wildcards) หรือ เครื่องหมายธรรมดา(Regular Expressions) อีกด้วย
สัญลักษณ์ตัวแทน(Wildcards)
ตัวอย่างเส้นทางโดยใช้สัญลักษณ์ตัวแทนโดยอาจจะมีลักษณะดังนี้:
$route['product/:num'] = "catalog/product_lookup";
ในเส้นทางในอาเรย์คีย์จะใส่ URI ที่ัจับคู่ไว้ โดยค่าในอาเรย์จะใส่ค่าของเส้นทางที่จะถูกกำหนดเส้นทางไปอีกที ในตัวอย่างด้านบนนั้นถ้ามีคำว่า "product" อยู่ในส่วนที่หนึ่งของ URL และตามด้วยตัวเลขในส่วนที่สอง จะถูกใช้ด้วยคลาส "catalog"และฟังก์ชัน "product_lookup"แทน.
สังเกตุ: ทางด้านซ้ายคือสิ่งที่จะถูกใช้ใน URL จริงและทางด้านขวาคือการบอกเส้นทางเพื่อไปทำงานภายในระบบ (ซึ่งใช้ URL)
คุณสามารถจับคู่ค่าตัวอักษรหรือคุณจะใช้สัญลักษณ์ตัวแทน(wildcard) ทั้งสองนี้ได้:
:num
:any
:num จะจับคู่ในส่วนนั้นเฉพาะเป็นตัวเลขเท่านั้น
:any จะจับคู่ในส่วนเมื่อเป็นอักษรใดๆ (ดังนั้นถ้าไม่ใส่ค่ามาก็จะไม่จับนั้นเอง)
สังเกตุ: เส้นทางจะทำงานตามลำดับที่ถูกสร้างไว้ เส้นทางที่อยู่สูงกว่าจะมีลำดับเหนือกว่าอันที่ต่ำกว่า
ตัวอย่างเช่น
นี้คือบางส่วนของตัวอย่างเส้นทาง
$route['journals'] = "blogs";
URL ที่มีคำว่า "journals" ในส่วนแรกจะถูกเปลี่ยนเส้นทางไปที่คลาส "blogs"
$route['blog/joe'] = "blogs/users/34";
URL ที่มีส่วนเป็น blog/joe จะถูกเปลี่ยนเป็นคลาส "blogs" ฟังก์ชัน "users" และ ID จะมีค่าเป็น "34"
$route['product/:any'] = "catalog/product_lookup";
URL ที่มีคำว่า "product" เป็นส่วนแรกและในส่วนที่สองเป็นอะไรก็ได้จะถูกเปลี่ยนเป็นคลาส "catalog" ฟังก์ชัน "product_lookup"
$route['product/(:num)'] = "catalog/product_lookup_by_id/$1";
URL ที่มีคำว่า "product" อยู่ในส่วนแรกและตามด้วยตัวเลขใดๆในส่วนที่สองจะถูกเปลี่ยนเป็นคลาส "catalog" และฟังก์ชัน "product_lookup_by_id" โดยผ่านค่าตัวเลขในส่วนที่สองไปยังตัวแปรของฟังก์ชัน ($1 นั้นเอง)
ข้อสำคัญ: อย่าใช้เครื่องหมายสแลช (/) นำหน้าหรือต่อท้าย เช่น "/blog/joe" , "blog/joe/" หรือ "/blog/joe/" ทั้งอาเรย์คีและค่าในอาเรย์
เครื่องหมายธรรมดา(Regular Expressions)
ถ้าคุณต้องการใช้เครื่องหมายธรรมดาเพื่อกำหนดกฎเส้นทาง ซึ่งอันไหนที่ถูกต้องตามเครื่องหมายธรรมดาจะถูกใช้เป็น "back-references"
ข้อสังเกตุ: ถ้าคุณใช้ "back-references" คุณจะต้องใช้เครื่องหมายดอลลาร์ แทนการใส่ backslash สองตัว (\\)
ตัวอย่างเส้นทางด้วยเครื่องหมายธรรมดาจะหน้าเป็นแบบนี้
$route['products/([a-z]+)/(\d+)'] = "$1/id_$2";
ในตัวอย่างด้านบน URI เป็น products/shirts/123 จะถูกเรียกแทนเป็นตัวควบคุมคลาส shirts และฟังก์ชัน id_123
คุณยังสามารถรวมระหว่างสัญลักษณ์ตัวแทนและเครื่องหมายธรรมดาได้ (regular expressions)
เส้นทางที่ถูกจอง
มีสองเส้นทางที่ถูกจองไว้:
$route['default_controller'] = 'welcome';
เส้นทางนี้ชี้ทางไปหาคลาสควบคุมตัวไหนจะถูกโหลดขึ้นเมื่อ URI ไม่มีข้อมูลใดๆเลย ซึ่งเป็นกรณีที่คนโหลด URL หน้าแรกของคุณขึ้นมา ตัวอย่างด้านบนคลาส "welcome" จะถูกโหลด คุณต้องมีเส้นทางอัตโนมัตินี้ไม่งั้นหน้า 404 จะประกฎขึ้นแทน
$route['scaffolding_trigger'] = 'scaffolding';
เส้นทางนี้ยอมให้คุณตั้งค่า "คำลับ" ซึ่งเมื่อถูกเขียนลงไปใน URL จะทำให้ใช้คุณสมบัติของโครงยกพื้น(scaffolding) รายละเอียดลองอ่านหน้า Scaffolding (โครงยกพื้น)
ข้อสำคัญ: เส้นทางที่ถูกจองนี้จะต้องมาก่อนเส้นทางที่มีสัญลักษณ์ตัวแทนหรือเครื่องหมายธรรมดา