질문 Q #18624
URL 관련 문의
미나리나물 2017-08-31 14:37:22

안녕하세요.

다름 아니라 URL 주소에 관해 질문 드립니다.

현재 uri segment를 사용해서 db를 불러오게 만들어 놨는데,

이렇게 사용하고 있습니다.

http://localhost/study/main/address/a

에서 address는 테이블명으로 사용하고 있고, a는 해당 테이블 내부에 a/b로 나뉜 값을 검색 조건으로 넣었습니다.

그래서 위 주소가 모두 표시되어야 하며, 사용자가 아래 허용된 주소 외 다른 주소, 예를들면

 

http://localhost/study/main/address      // 이렇게 맨 뒤를 빼고 입력 한다던가,

http://localhost/study/main/comment/a     // 이렇게 다른 주소를 넣었을 때, 

 

오류를 뿜지 말고 지정된 주소로 돌아가게 하려고 합니다.

어떤 부분을 만져야 할까요?

 

답변 9
#1 한대승(불의회상) 2017-08-31 14:56:32
해당 컨트롤러에서 세그머트 관련된 로직을 만져야 겠죠.
#2 미나리나물 2017-08-31 16:16:26
지정된 주소 외 다른 주소로 접근 하는것을 막으려는건 어떤 부분을 추가해야 할까요?
#3 한대승(불의회상) 2017-08-31 16:33:04

지정된 주소와 다른 주소를 어떻게 구분하나요?

#4 미나리나물 2017-08-31 17:20:30

study/main/address/a 에서

segment[1] = main

segment[2] = address 또는 mail

segment[3] = a 또는 b

이게 허용가능한 주소인데, 이거 제외 나머지 주소를 넣으면 강제로 redirect 하려고 합니다.

#5 한대승(불의회상) 2017-08-31 17:37:28
@미나리나물 다 만드셨네요. 컨트롤러에서 if문으로 처리해 주세요.
#6 미나리나물 2017-08-31 17:40:30

컨트롤러에 어떤 부분에 넣으면 되나요?

index 부분에 넣으면 될까요?

#7 한대승(불의회상) 2017-08-31 17:44:41
메뉴얼에서 _remap 확인해 보세요.
#8 미나리나물 2017-08-31 18:49:32

감사합니다! 덕분에 일단 segment[2] 까지는 해결 했습니다.

if (method_exists($this, $method)) {
      $this -> {"{$method}"}();
    } else {
      redirect('/main/address/a','refresh');
    }

 

그런데 여기서 마지막 segment[3] 도 _remap 에서 변수 처리 될까ᄋᄋ요?

#9 미나리나물 2017-09-01 01:54:06

segment[3] 부분은 수행되는 함수의 첫번째 부분에 아래 구문을 붙여 해결 했습니다.

$seg3 = $this -> uri -> segment(3);
    if ( !($seg3 == 'a' or $seg3 == 'b') ) {
      redirect('/main/address/a','refresh');
    }

 

혹시 더 좋은 방법이 있을까요?