2015-01-25 6 views
6

하위 도메인 집합을 CI 설치의 "컨트롤러"폴더 안에있는 폴더로 리디렉션하려고합니다. 나는 SO에서 찾은 많은 것들을 시도했지만 프로젝트에는 아무런 효과가 없거나 필요한 동일한 스펙을 가지고있다. 내가 멍청한 놈 이니까 .htaccess에 관해서는 여기에 자격이있는 사람에게 물어볼지도 모르겠다. (| 관리자 | API WWW)에/응용 프로그램/컨트롤러/(www가 | 관리자 | API) 해당 폴더 CodeIgniter - 하위 폴더를 "컨트롤러"의 폴더로 리디렉션합니다.

  • 적어도이 세 가지 하위 도메인을 리디렉션 할 필요가 도심 this awesome .htaccess file를 사용

    • : 여기 사양입니다 실제로 주소 표시 줄에

    예를 URL을 변경하지 않고 (단지 말)에 REQUEST_URI

  • 과 잃어버린없이
  • : HTTP : // API를 .domain.com에/일부/URI/세그먼트 내부적으로 CI_installation_folder/응용 프로그램/컨트롤러/API로 리디렉션해야/일부/URI/세그먼트

    나는 이런 식으로 뭔가 (및 변형)을 시도했다 :

    RewriteCond %{HTTP_HOST} ^(www|admin|api) [NC] 
    RewriteRule ^(.*)$ /%1/$1 [L,R=301] 
    

    정도 등이 개 다른 라인으로 RewriteRule을 대체 :

    RewriteCond %{ENV:REDIRECTED} !true 
    RewriteRule ^(.*)$ [L,R=301,E=REDIRECTED:true] 
    

    루프를 방지하기 위해,하지만 난이 얻을 수있는 모든 중 하나 루프 리디렉션 (1 케이스) 또는 EV입니다 내가 주소 표시 줄에 URL을 변경 아니에요 이후도 작동하지 않습니다이

    RewriteCond %{REQUEST_URI} !^/(www|admin|api) [NC] 
    

    추가 약간의 변동 :(

    에 500 서버 오류 갖추고 있습니다. 나는 또한 [P] 플래그로 어떤 성공도 얻지 못했다.

    아무도 도와 줄 수 있습니까? 감사!

  • 답변

    4

    Codeigniter의 경로 구성을 사용해 보셨습니까?

    htaccess 다시 작성 할 필요가 없습니다. 올바른 방법이지만 config/route.php 파일의 하위 도메인을 확인하고 하위 도메인의 라우팅을 설정할 수 있습니다. 당신이 더 일반적인/동적 라우팅을 할 그것을 좋아한다면

    switch ($_SERVER['HTTP_HOST']) { 
        case 'admin.domain.com': 
    
         $route['(:any)'] = "admin/$1"; // this will set any uri and add the controler fodler to it 
    
         $route['default_controller'] = "admin/home"; // set the default controller for this subdomain 
    
         break; 
    
        case 'api.domain.com': 
    
         $route['(:any)'] = "api/$1"; // this will set any uri and add the controler fodler to it 
    
         $route['default_controller'] = "api/home"; // set the default controller for this subdomain 
    
         break; 
    } 
    

    , 당신은 (같은 config/route.php 파일에) 이런 식을 가질 수

    $controllerFolderName = array_shift((explode(".",$_SERVER['HTTP_HOST']))); 
    
    $route['(:any)'] = $controllerFolderName."/$1"; 
    $route['default_controller'] = $controllerFolderName."/home"; 
    

    이 라우팅은 모든 하위 도메인에 대한 작동하며 하위 도메인과 동일한 이름을 가진 컨트롤러 폴더 내의 폴더로 기본 라우팅을 설정하므로 api.domain.com과 같은 도메인의 경우 api 등으로 설정된 경로를 갖게됩니다.

    모든 하위 폴더와 항상 일치하는 모든 폴더 이름에 대해 동일한 논리를 유지하는 것이 중요하며 하위 도메인이없는 방문자 (http://domain.com)에 오류 처리 시스템을 추가하는 것이 좋습니다. 하위 도메인이지만 해당 이름의 폴더가 존재하지 않습니다 (file_exits을 사용하여 수행 할 수 있음)

    +0

    빠른 응답을 보내 주셔서 감사합니다.하지만 제 생각은 가능한 한 가장 낮은 수준에서 수행하는 것이 었습니다. 그리고 당신이 또한 내가 당신의 평균 "그냥 작동하게"하는 사람이 아니라는 것을 고려한다면, 당신은 이것이 나에게 적합한 해결책이 아니라는 것을 깨닫게 될 것입니다. 규칙과 경로 및 내용을 복제하지 않고도 동적이고 쉬운 유지 관리가 필요합니다. –

    +1

    그래서 삶이 쉽기를 바란다 ... 그것은 아주 좋은 접근이다. 내 대답을 업데이트하자. – Lupin

    +0

    이 접근법은 조금 더 깨끗하다. :) 그리고 나는 너무 까다 롭지 만 내가 말했을 때 가능한 가장 낮은 수준에서이 작업을 수행하고 싶었습니다. **. htaccess 리디렉션 **을 사용하여이 문제를 해결하고자하는 열망을 실제로 표현했습니다. 왜냐하면 성능 문제가 내 경우에 발생했기 때문입니다. :) –

    1

    몇 시간 더 파고 나면 문제가 해결 된 것 같습니다. 여기에 (관심 것들에 대한) 방법은 다음과 같습니다

    # Subdomains to Folders + Enforce www RewriteCond %{HTTP_HOST} ^(www|admin|api) [NC] RewriteRule ^(.*)$ http://www.localhost/%1/$1 [L,P,S=1] RewriteRule ^(.*)$ http://www.localhost/$1 [L,R=301]

    내가 www가 집행자 규칙과 내부 리디렉션을 결합했다. 이것 이후에해야 할 일은 Apache 서버가 PROXY 요청을 받아들이고 올바르게 리디렉션하도록 구성하는 것입니다.

    phun!

    관련 문제