CI 묻고 답하기

제목 처음 올리는 글이 문답글이라니.. 염치없지만 routes관련 질문드립니다.
글쓴이 johnchoi 작성시각 2013/08/09 01:32:47
댓글 : 5 추천 : 0 스크랩 : 0 조회수 : 12986   RSS
 안녕하세요. 초보이며, php개발자의 길에 들어서는 외국인노동자입니다.

저는 지금 기존에 CI로 개발되어있는 웹사이트의 모바일버전을 만들고 있는중입니다.
CI와 jquery mobile을 이용해서 만들고 있는데 둘다 처음이다보니 꽤 고생중입니다.

기본적으로 필요한 메인페이지와 로긴다이얼로그, 연락처다이얼로그등등 만들고 있는데,
간헐적으로 보이는 404에러때문에 이렇게 질문드립니다.

앞에서 말씀드렸다시피 모바일버전을 추가개발하는중이라 
모델은 그대로 기존꺼 사용하고,
컨트롤러, 뷰만 섭폴더인 mobile을 만들어서 따로돌아가게끔 하는중입니다.

Default_controler가 기존에 page로 설정되어 있어서 똑같이
모바일 컨트롤러에도 page컨트롤러를 만들어서 라우팅을 하려는데요..
이상하게 주소를 치면, MyUrl/index.php/mobile 이렇게 들어가면
자꾸 저 주소가 MyUrl/index.php/undefined로 바뀌면서 
페이지를 찾지 못합니다.

이런 현상은 브라우져를 열고 처음 접속했을시에만 나타나고 
한번 404에러를 보고나면 똑같은 주소를 재입력해서 들어가도 제대로 연결이 됩니다.

기본이 너무 부족해서 뭐가 어디서부터 문제인지를 잘 모르겠습니다.

비슷한 현상이나 라우팅관련해서 작은 도움이라도 부탁드립니다.ㅠㅠㅠㅠ

아래는 routes.php소스 입니다.
$route['default_controller'] = "page";
$route['scaffolding_trigger'] = "";
$route['admin'] = 'admin/home'; 
$route['mobile'] = 'mobile/page'; 
참고로 admin관련 기능및 페이지가 controller/admin, views/admin이런식으로 하위폴더에 정의되어 있어서
저도 기존 개발자가 하던방식을 따라한다며 만들었는데 제껀 자꾸 문제가 있네요..ㅠ

어떤도움말씀이나, 따가운충고 달게받겠습니다. 도와주세요...ㅠ
태그 404,error,에러,라우팅,routing,routes,미친크롬
 다음글 CI 1.7.3에서 mysql 5.0 연결 (2)
 이전글 두 개의 그림파일 합치는 방법? (3)

댓글

변종원(웅파) / 2013/08/09 03:31:29 / 추천 0
controllers 디렉토리 하위에 mobile 디렉토리가 있고 page.php 컨트롤러가 존재하는거죠? page컨트롤러안에 index() 메소드가 있는게 맞구요?
johnchoi / 2013/08/09 03:50:37 / 추천 0
네.. 맞습니다.

관심과 뎃글 감사드립니다.


그런데 제가 헛다리를 짚고있던거 같네요..
초기에 모바일버전을 새로 만들자고 했을때 기존 웹의 메인페이지에 javascript로 모바일 장비인지 아닌지 디텍트해서 window.top.location.href로 강제로 이동시키는 펑션이 있었는데...
한번 이동하고나면 쿠키를 남겨서 모바일에서 데탑버전으로 갈경우 되돌아오는걸 방지하게 했었는데 그때 쿠키부분 설정하면서 쿠키값이 존재하지 않으면 강제로 이동하고 아니면 그냥 데탑에 남아있게 했었어요.

그런데 그부분에서 이번 문제가 나왔더라구요..
쿠키유효가 만료되고나면 모바일뷰에서 쿠키값을 만들고 다시 리다이렉트를 하더랴구요. 그런데 거기에서 url값이 없어서 현제 주소에서 url(undefiend 값)이 추가된 주소로 다시 보내게 됐더라구요..

제가 스스로 만든 트랩이었어요.ㅡㅡ; 우연히 발견했네요.
몇일을 못찾다가 이제 막 해결하고 기뻐서 소리치려는 차에ㅎㅎ

아무튼 감사드립니다. 

그래도 잘모르던부분은 확실히 잡고 넘어가고 싶어서 여쭙는데요..
컨트롤러밑에 각 하위폴더는 config/routes.php에 설정된 default_controller에 따라서 주소뒤에 아무 정보가 없을때 해당 컨트롤러로 실행되는게 맞는거죠???
들국화 / 2013/08/09 09:55:54 / 추천 0
네...

프레임워크에서 모바일인지 판단하는것 보다는  .htaccess 에서 체크하는게 좋습니다.
johnchoi / 2013/08/10 00:51:44 / 추천 0
웅파님, 들국화님 답변 감사드립니다.

들국화님께 한가지 말씀드리고 여쭙고 싶은게 있습니다.
프레임워크에서 모바일인지 판단한다는것이 CI즉 php단에서 처리하는걸 말씀하시는거죠?..
그러면 .htaccess에서 처리한다는게 htaccess파일에 해당내용을 넣고 처리하라는걸로 이해가 됩니다.

그렇다면, 궁금증이 하나 더 생기는데요 .htaccess파일은 아파치 서버가 디렉토리레벨에서 엑세스권한들을 설정해주는 파일이라고 알고있는데요..
해당 파일의 설정을 추가, 변경등을 하면 한개의 아파치 서버에서 여러개의 도메인루트를 처리할때 즉, 하나의 아파치서버에 여러 홈페이지를 올려놨을때, 각각 따로따로 설정을 해서 따로따로 권한부여가 되는건가요? 
각각의 홈페이지 루트에 따로따로 .htaccess파일이 존재하는걸 보면 그런듯한데..
회사 사정상 한개의 IIS(Windows system)에서 여러개의 홈페이지를 관리하고 있거든요..

다른 홈페이지들은 제 권한밖의 것이며 최소한의 영향(시스템상의 메모리나 기타 리소스들) 외에는 영향을 주지않아야 하는게 원칙이라서요.. 

질문이 너무긴거 같아요, 짧게 요약하면,
.httpaccess파일을 수정하면 해당 웹사이트의 루트에서부터 하위디렉토리들에만 영향을 미치는건가요?


변종원(웅파) / 2013/08/10 10:07:56 / 추천 0
htaccess파일이 권한제어도 하지만 rewrite룰도 적용을 합니다.
ci에서는 rewrite룰을 적용하는 용도로 사용합니다.