생활코딩

Coding Everybody

URI Routing

토픽 생활코딩 > 서버 > PHP > CodeIgniter

URI Routing

URI 라우팅이라는 것은 사용자가 접근 한 URI에 따라서 Controller의 메소드를 호출해주는 기능이다. 이에 대해서는 이미 Controllers 수업에서 살펴봤다. 기본적인 룰을 다시 살펴보면 아래와 같다.

ooo2.org/index.php/class/method/id

ooo2.org/index.php/topic/get/1

위의 URL은 아래 파일을 로드한다.

application/controllers/topic.php

그리고 get 메소드에 첫번째 인자로 1을 전달하며 호출한다.

URI 메핑 변경하기

만약 URI에 따른 Controller의 호출 규칙을 변경하고 싶다면 application/config/routes.php 파일을 수정하면 된다. URI의 규칙은 배열을 이용한다. 

예제1

예를들어 아래의 URI을 

ooo2.org/index.php/topic/get/1

아래의 URI로 변경하고 싶다고 하자.

ooo2.org/index.php/topic/1

그럼 아래의 구문을 routes.php 파일에 추가한다. $1은 첫번째 괄호의 값으로 치환된다.

$route['topic/(:num)'] = "topic/get/$1";

예제2

사용자가 /index.php/post/1로 들어오는 경우에도 controllers/topic.php 파일을 사용하게 하고 싶다고 하자. 

그럼 아래와 같이 routes.php 파일을 추가한다.

$route['post/(:num)'] = "topic/get/$1";

예제3

URI 라우팅에는 정규표현식도 사용할 수 있다. 아래의 예제를 보자.

$route['topic/([a-z]+)/([a-z]+)/(\d+)'] = "$1/$2/$3";

아래의 URL은 위의 설정에 해당된다.

ooo2.org/index.php/topic/module/get/3

이것은 아래의 파일을 로드한다.

application/controllers/module.php

그리고 아래의 메소드를 호출한다.

get(3)

코드

application/config/routes.php

차이점

전체코드

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

$route['topic/(:num)'] = "topic/get/$1";
$route['post/(:num)'] = "topic/get/$1";
$route['topic/([a-z]+)/([a-z]+)/(\d+)'] = "$1/$2/$3";
$route['default_controller'] = "topic/index";
$route['404_override'] = 'errors/notfound';

application/controllers/module.php

<?php
class Module extends CI_controller {
	public function get($id){
		echo $id;
	}
}
?>

application/controllers/errors.php

<?php
class Errors extends CI_controller{
	public function notfound(){
		$this->load->view('head');
		$this->load->view('error/404');
		$this->load->view('footer');
	}
}
?>

application/views/error/404.php

존재하지 않는 페이지 입니다.

태그

태그명 : URIRouting

태그주소 : https://github.com/egoing/codeigniter_codeingeverbody/tree/URIRouting

댓글

댓글 본문
  1. 공부하기
    터미널 켜서
    php spark routes
    쓴다음 확인 CI4에 맞게 수정하시면 편합니다
  2. 존레논아부지
    2022-10-25 완
  3. dueto park
    2022.07.02. URI Routing 수강 완.

    - 브라우저에 "카페24호스팅주소/topic/Module/get/1" 입력했는데 '페이지 없음'에러 난다면,
    - 파일: application/config/routes.php
    - (수정 전) route['topic/([a-z]+)/([a-z]+)/(\d+)'] = "$1/$2/$3";
    - (수정 후) route['topic/([a-zA-Z]+)/([a-z]+)/(\d+)'] = "$1/$2/$3";
    > 정규표현식에 영문 대문자 선언을 하지 않으면 오류 발생
    > 만약 정규표현식을 바꾸고 싶지 않다면, URI의 Module을 module로 수정
    (출처) https://selina-park.tistory.com/92
  4. jeisyoon
    2021.08.17 URL Routing - OK
  5. 웹짱
    2020.10.27
  6. Melonzz
    위의 예제는 'post' 로 들어와도 'get' 으로 갈 수 있게 설정하는 예시였던 듯 합니다. 그래서 오타가 아니에요~
    대화보기
    • 쭌~
      예제 2 오타있네요.
      $route['post/(:num)'] = "topic/get/$1";
      => $route['post/(:num)'] = "topic/post/$1";
      차이점과 전체코드에도 같은 오타가 있어요.
    • Kun-Woo Lee
      좋은 강좌 감사합니다
    • Leos
      해당 부분을 열심히 보고 하고 있는데.

      CI 콘트롤러의 파일명의 첫자는 콘트롤로 클래스 같이 대문자로 써주어야 하는건가요?

      실습처럼 소문자로 하니까 안되고 대문자로 작성해야 되네요?

      그것이 맞는건가요?
    • 김세창
      감사합니다. 잘배워갑니다~@@
    • 신입1
      감사하므니다
    • 보보
      깔끔한 명강의에요.ㅎ
    • JustStudy
      고맙습니다
    • 양수경
      정말 좋은 강의입니다.

      강의 이해가 쏙쏙 잘되고 지금 정주행 해서 듣고 있는데 잘 듣고 있습니다.

      강의 해주시는 분이 정말 전문 강사 보다 더 잘하시는거 같아요

      감사합니다.~
    • 감사합니다.
    • 쌈닭
      대화보기
      • 조현식
        정말 감사합니다 ㅎㅎㅎㅎ
      • 김승갑
        좋은 강의 감사합니다. 많이 배워가네요 :D
      • 김동진
        코드 이그나이터 한국 사용자 포럼에서 본적이 있는 내용같은데요.
        한번 둘러보시면 좋을것 같아요! 23일 전 댓글이지만 답글 달아봅니다. ㅎㅎ
        대화보기
        • leonlim6875
          루트 defalut_contoller 변경휘 localhost.xxx.index.php.topic 이 작동을 하지안습니다..
          localhost.xxx.index.php.topic 해야만 작동이 됨니다 index.php 없에는 방법 있아요?
        • 안녕하세요
          웹 페이지 개발하면서 궁금한 것이 있어 글을 남김니다.
          friendly url을 만들려고 하는데요... 구글링이 서툴러서 그런지 정보 찾는게 쉽지가 않아서요..
          도움이 될 만한 정보를 얻을 수 있을까요??
        • Korea Space Weather Center
          http://codeigniter-kr.org/user...
          페이지의 "컨트롤러들을 하위폴더로 구성하기" 를 참고 하시면 될것 같네요.
          대화보기
          • 검은빨대
            저 궁금한게 있는데요. CI 가 처음이라 마냐님 게시판을 받아서 분석하려고 하고 있습니다만, 컨트롤러 디렉토리 안에 다시 서브 디렉토리들이 있고 그 안에 콘트롤 파일들이 있습니다. (예 : 로그인등), 그런데 문제는 URI 로 붙었을때 그 디렉토리를 찾지를 못합니다.일반적으로 콘트롤러 안에있는 클래스를 찾는듯 한데 서브 디렉토리에 위치한 클래스는 어떻게 세팅을 해야 찾을수 있는지요. 알려주세요~~~ 아무리 뒤져도 안보여서 ㅠ,.ㅠ