2011-08-31 4 views
2

좋아, 아마도 그 제목이 약간 혼란 스럽습니다. 내가 무엇을하고 싶은지, 모든 URI를 세그먼트화한 후 다른 세그먼트가 특정 세그먼트이고 다른 컨트롤러로 전달하는 경우 모든 정보를 트랩합니다. 내가 mydomain.com/testroute있어 경우CodeIgniter, 하나의 경로에 여러 개의 가능한 세그먼트가 있습니다.

$route['default_controller'] = "main"; 
$route['404_override'] = ''; 
$route['testroute'] = "main"; 

그래서, 이것은 지금 무엇, 그것은 나에게 그것을해야 기본 페이지를 보여줍니다 : 여기 내 경로 파일입니다. 그러나 mydomain.com/testroute/testmethod/로 이동하면 testmethod가 주 컨트롤러의 메서드이기 때문에 앞으로 전달할 수도 있습니다. 그래서 기본적으로 testroute 이후에 더 많은 세그먼트가 있는지에 상관없이 메인 컨트롤러로 라우트하고 싶습니다.하지만 메인 컨트롤러의 메소드 호출로 전달되어야합니다.

답변

3

주어진 매개 변수를 간단히 잡아서 컨트롤러에 전달하십시오. 같은 :

$route['testroute/(:any)'] = "main/$1"; 

(:any) 실제로 문자열의 모든 유형을 잡는다. 다른 셀렉터도 있습니다. 이 주제에 대한 자세한 내용은 here을 참조하십시오.

편집 (귀하의 코멘트에 대답) : 당신이 당신의 메인 컨트롤러의 인덱스() 메소드에 대한 일반적인 경로를 원하는 경우

, 그냥 두 경로를 추가 :

코멘트에 대한 자료입니다
$route['testroute'] = "main"; 
$route['testroute/(:any)'] = "main/$1"; 
+0

예. 나는 그것을 시도했다. 문제는 이후에 세그먼트없이 testroute로 이동하면 404가됩니다. 별도의 경로를 선언 할 필요없이 세그먼트가 더 이상 없다면 주 인덱스에 대한 해결 방법이 있습니까? – LoneWolfPR

+0

위를 보아서 대답을 편집했습니다. 게다가, 나는 CI 매뉴얼의 기사를 살펴볼 것을 제안한다. 정규 표현식과 다른 좋은 것들을 사용하여 라우팅을 만드는 많은 방법이있다. –

+0

편집에 대한 응답 : 예, 나는 그것이 내가해야 할 일이라고 생각했다. 가능한 경우 간단하게하기 위해 하나의 경로로 유지하려고했습니다. – LoneWolfPR

0

어, 그게 뭐야? 이것이 바로 CodeIgniter의 컨트롤러가 작동하는 방식입니다. 몇 가지 코드를 보여 주시겠습니까? 그것에 대해 작동하지 않는 것은 무엇입니까?

.htaccess 파일에서 URL 재 작성을 구성 했으므로 URL에 /index.php/testroute이 필요하지 않습니까? 이미 다시 작성하지 않은 경우

열기 htaccess로,이 코드를하려고이 :

RewriteEngine on 
RewriteCond $1 !^(index\.php|robots\.txt) 
RewriteRule ^(.*)$ index.php/$1 [L] 

당신은^그없이 작동하지 않습니다,하지만 당신처럼 액세스 할 수 있습니다 후 재 작성 구성하지 않은 경우 mydomain.com/path/to/ci/index.php/testroute/testmethod

+0

, 대답이 아닙니다. – Ben

+0

@Ben Refresh, please. 시도해 볼 정보를 더 많이 포함하도록 답변을 편집했는지 확인하십시오. – Cyclone

+0

아직도 생각지도 못한 점 – Ben

관련 문제