CI 묻고 답하기

제목 2차 도메인의 rewrite rule 질문 입니다.
글쓴이 터푸 작성시각 2013/04/08 10:02:10
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 21144   RSS
 매번 눈팅만 하다가 좀 난감한 문제가 발생하여 질문을 드려 죄송하고
질문 시작 하겠습니다.

메인 웹서버에서 메인 페이지 및 클럽/블로그 형태의 웹을 돌리려고 하고 있는데,
여기서 좀 골치가 아픈 일이 생겨서 말이죠

다름이 아니고 CI 를 이용하여 개발을 하고 있는데
컨트롤러 단에서 서비스를 분리하려고 합니다.

Controller -> main_web 
                   -> club 
                   -> etc...

현재 클럽을 예로 들면
www.test.com/club/index/CLUB_ID 의 경로로 가면 클럽의 메인 페이지가 나오는 구조 입니다.
(실제로 이렇게 구현되어 있고 잘 돌아 갑니다)

그러나 
제가 생각하고 있는것은 위의 url 구조가 아니고
club.test.com/CLUB_ID 의 url 구조입니다.

그래서 .htaccess 를 손보고 있는데 잘 안되더군요

=================================================
RewriteEngine on
 
RewriteCond %{HTTP_HOST}  ^club\.test\.com/* 
#RewriteRule ^(.*)$ http://test.com/index.php/club/index/$1 [L] 
RewriteRule ^/(.*)$  /home/test.com/public_html/index.php club index $1 [L] 

#CI conf start
RewriteCond $1 !^(index\.php|css|js|img|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
=================================================

RewriteRule ^(.*)$ http://test.com/index.php/club/index/$1 [L] 이렇게 구현하면
잘 돌아가나, 문제는 브라우져의 url 이 redirecting 되어 
실제로 브라우져상의 url 이 "www.test.com/club/index/CLUB_ID" 이런형식으로 보이게 됩니다.;;;

그래서 
RewriteRule ^/(.*)$  /home/test.com/public_html/index.php $1 [L] 
이런 형식으로 구현을 해 보려고 하는데 이것은  오류가 발생하고 이 자체만으론 redirect 순환 오류가 
발생하는것도 같아서 골치가 아픈 상태구요

마지막으로 
routes.php 를 수정하여

if( /* 호스트가 클럽쪽에서 온 것이라면 */){
  //$route['(:any)'] = "/club/index/$1";
}

이렇게 구현을 하니까 일단은 됩니다.
그러나 이런 redirect 에 관련된 부분을 php 에서 처리하는 것이 좀 부담스럽고
일단 라우팅 소스에 이런 부분이 있는다것 자체가 자꾸 거슬리고 있는지라

되도록이면 apache rewite 에서 해결을 하고 싶은데 잘 안되네요

CI로 수년간 개발해 오신 분들의 조언과 경험담을 부탁 드려 봅니다.

 다음글 URL암호화 관련 문의. (2)
 이전글 form_validation 이 작동을 안합니다.. (8)

댓글

당근 / 2013/04/08 14:55:13 / 추천 0
#CI conf start
RewriteCond $1 !^(index\.php|css|js|img|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]  ==> 이부분을요  
=================================================


RewriteRule ^(.*)$ club/index.php/$1 [L]  

이렇게 하시면 될꺼같아여
터푸 / 2013/04/09 10:05:39 / 추천 0
 #CI conf start
RewriteCond $1 !^(index\.php|css|js|img|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]  ==> 이부분을요  
=================================================


RewriteRule ^(.*)$ index/club/index.php/$1 [L]  <-- 이렇게 하면 

rewritelog 에 실제로 
rewrite 'club/index/testclub' -> 'index.php/club/index/club/index/testclub'

add per-dir prefix: index.php/club/index/club/index/testclub -> /home/test.com/public_html/index.php/club/index/club/index/testclub

strip document_root prefix: /home/test.com/public_html/index.php/club/index/club/index/testclub -> /index.php/club/index/club/index/testclub

이렇게 두번 rewrite 가 되는 현상이 발생해서 안되네요;;;;


당근 / 2013/04/09 16:57:29 / 추천 0
루트쪽에 .htaccess두신거 같은데요.. 서브 디렉토리에 두시면 될꺼 같아요.. 여러경우라면..

해당 디렉토리마다 club/index.php $1  => XXX/index.php 형대로 각 폴더마다 두시면 될꺼 같아요..

도움이 되어야 할텐데...