URI 라우팅 규칙 Routing
일반적으로 URL 문자열과 클래스/함수 간에는 1대1 관계를 이룹니다
URL 의 세그먼트는 통상 다음의 형태를 따릅니다:
example.com/class/function/id/
그러나 어떤 경우에는 위와같은 1대1 매칭 대신 다른 클래스 나 함수를 호출하고자 할때도 있을것입니다.
예를들어 여러분은 아래와 같은 형식의 URL 을 원한다고 합시다:
example.com/product/1/
example.com/product/2/
example.com/product/3/
example.com/product/4/
일반적으로 두번째 새그먼트는 함수이름이 되어야하나 , 위의 예에서는 함수이름대신 제품 ID 입니다.
이렇게 하려면 CodeIgniter 의 재매핑(remap) 기능을 사용하시면 됩니다.
나만의 라우팅 규칙 설정하기
라우팅 규칙은 application/config/routes.php 파일에 정의되어있습니다.해당파일을 보시면 $route 배열이 있는데 그 배열을 통해 여러분만의 라우팅 규칙을 설정할 수 있습니다.라우팅은 와일드카드(*) 나 정규표현식 으로도 설정할 수 있습니다.
와일드 카드(*)
일반적인 와일드 카드 라우팅은 아래와 같이 설정합니다:
$route['product/:num'] = "catalog/product_lookup";
라우팅 설정에서 배열의 키는 호출될 URI 를 나타내며, 배열의 값은 매핑될 도착지(실제로 사용자에게 보여질 URI)를 나타냅니다.
위 예제에서 요청되는 URL 의 첫번째 새그먼트가 "product"이고 두번째 새그먼트가 숫자 가 됩니다. 이런 URL 요청이 들어오면 자동으로 catalog 클래스의 product_lookup 함수가 호출됩니다.
라우팅에서 사용할수 있는 와일드 카드는 아래와같이 두가지(숫자,모든것)입니다.:
:num
:any
:num 오직 숫자만 매치시킴
:any 모든 문자를 매치시킴
Note: 라우팅 설정은 상위에 설정된것이 하위에 설정된것보다 우선실행됩니다.
예제
여기 몇몇 라우팅 예제가 있습니다:
$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" 함수로 연결되며 두번째 새그먼트는 변수로서 함수에 전달돌것입니다.
Important: Do not use leading/trailing slashes.
정규표현식
라우팅 규칙을 설정하는데 정규표현식을 사용하고싶다면 가능합니다
어떤 정규표현식도 후위참조(back-references)로서 사용가능합니다
Note: 후위참조(back-references)를 사용하실때는 이중 백슬래쉬(\\)대신 달러($)를 사용해야합니다..
정규표현식 경로설정은 일반적으로 다음의 형태를 가집니다:
$route['products/([a-z]+)/(\d+)'] = "$1/id_$2";
위 예제에서는, products/shirts/123 같은 경로가 shirts 컨트롤러의 id_123 함수로 매핑될 것입니다.
또한,와일드 카드 및 정규표현식경로를 섞어 쓸수있습니다.
예약된 라우팅 경로 (Reserved Routes)
예약된 경로는 두가지가 있습니다:
$route['default_controller'] = 'welcome';
위 라우팅 경로는 URI 가 아무런 데이터도 포함하지않았을때 어떤 컨트롤러가 로드 될지 나타냅니다. 루트경로를 호출했을경우가 이에 해당합니다.
위 예제의 경우 welcome 클래스가 로드될것입니다. 항상 기본 라우팅경로를 설정해둘것을 권장합니다. 그렇지않으면 404 에러페이지를 기본으로 내보낼테니까요. $route['scaffolding_trigger'] = 'scaffolding';
이 경로는 스케폴드를 호출하기위해 secret word 를 세팅하는 경로입니다. 더 자세한것은 스케폴드 페이지를 참고하세요.
Important: 예약된경로는 어떤 와일드카드,정규표현식 경로보다 앞에 와야합니다..