CI 묻고 답하기

제목 index.php? 중 ? 안보이게...
글쓴이 Atman 작성시각 2010/04/03 19:59:45
댓글 : 6 추천 : 0 스크랩 : 0 조회수 : 33955   RSS
초보 2번째 질문입니다.

 .htaccess 파일을 아래와 작성했습니다.
*s--------.htaccess --------------------------------------------------
RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
*e--------.htaccess --------------------------------------------------

테스트 결과 abc.com/?test
이렇게 해야 나오는데

이걸 abc.com/test 로 바꾸고 싶습니다.

application 의 config.php
$config['index_page'] = "index.php"; 를
$config['index_page'] = "index.php?"; 로 바꾸어도 안나오는데...

방법을 부탁드립니다.
 다음글 CI를 포함한 framework 와 pear 의 차이가... (1)
 이전글 foreach 질문입니다~! (4)

댓글

변종원(웅파) / 2010/04/03 22:04:11 / 추천 0

현재 게시판에서 제 닉네임으로 검색후 나온 첫번째 글 참고해서 $_SERVER변수 찍어보세요.
어떻게 나오는지.. isp에 따라 또는 공유기 설정에 따라 $_SERVER변수가 다르게 나오는 경우가
있었습니다.

Atman / 2010/04/04 02:02:51 / 추천 0
index page 의 경우는
(아무것도 안나오옴)
/
/index.php
로 나오는데

일반 화면의 경우
tclass
/?tclass
/index.php
로 나옵니다.

config 쪽에 URI PROTOCOL 을 Auto , path_info 등으로 바꾸어도 ? 가 없는 형태로
만들어지지는 않네요?

혹시 경험있으신 분의 답변을 기다립니다.
변종원(웅파) / 2010/04/04 09:57:46 / 추천 0
$config['index_page'] = '';

위 변수는 null이어야 하고

*s--------.htaccess --------------------------------------------------
RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php?/$1 [L]
*e--------.htaccess --------------------------------------------------

index.php? 로 바꿔서 해보세요.
Atman / 2010/04/06 21:10:21 / 추천 0

웅파님 감사합니다.
근데.. 아직 풀지 못하고 있습니다.
고민을 하는 것은 풀리고 있는 과정이겠죠?

언제가는 풀어지리라는 희망을 가지고 ^^;

변종원(웅파) / 2010/04/07 09:40:14 / 추천 0

제 경우는 메인에 접속을 하면 (http://codeigniter-kr.org) 페이지를 찾을 수 없다고 나왔었습니다.
$_SERVER를 찍어보니 http://codeigniter-kr.org/index 이렇게 나오더군요.
query_string이 없어야 하는데 그렇게 나왔던거죠.
그래서 index.php 파일 맨 첫머리에

if($_SERVER['QUERY_STRING'] == 'index' or $_SERVER['QUERY_STRING'] == '/'){
?>
<script>location="<?=$base_url?>index.php";</script>
<?
}
이걸 넣어서 처리를 했습니다.

제 경우와는 틀리게 메인은 정상이고 세그먼트에 ?가 붙는 경우네요.

config.php의 $config[‘uri_protocol’] 는 어떻게 설정하고 쓰시는지요?

tuyitu719 / 2026/03/14 11:18:12 / 추천 0

지금 바꾸셔야 하는 건
$config['index_page'] = "index.php?";
가 아니라, 오히려 index_page를 빈 문자열로 두는 것입니다. CodeIgniter 문서도 mod_rewrite로 index.php를 없앨 때는 index_page를 비워 두라고 안내하고 있고, 반대로 query string 방식을 쓰면 URL이 ? 형태로 동작할 수 있습니다.

즉, 원하시는 형태가

abc.com/test

라면 설정은 보통 이렇게 갑니다.


 
 
$config['index_page'] = '';
$config['enable_query_strings'] = FALSE;
 

특히 지금처럼 abc.com/?test 식으로 나온다면, enable_query_strings가 켜져 있거나 query string 방식으로 URL이 만들어지고 있을 가능성이 큽니다. CodeIgniter는 enable_query_stringsTRUE로 두면 query string URL 방식을 활성화합니다.

그리고 .htaccess도 지금 작성하신 것보다 아래처럼 바꾸는 쪽이 일반적입니다.


 
 
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
 

Apache의 mod_rewrite.htaccess에서 URL path를 다시 매핑할 수 있고, RewriteRule은 query string이 아닌 URL path 부분을 기준으로 동작합니다. 또 .htaccess에서는 상대 경로 치환을 쓸 때 RewriteBase가 필요할 수 있습니다.

정리하면:

  1. config.php에서
    index_page'' 로 변경

  2. enable_query_stringsFALSE 로 확인

  3. .htaccess를 일반적인 rewrite 규칙으로 수정

  4. 사이트가 서브폴더에 있으면 RewriteBase /폴더명/ 으로 맞춤

게시판 답변용으로는 이렇게 써도 자연스럽습니다.


 
 
원인은 index_page 설정 방향이 반대라서 그렇습니다.

abc.com/test 형태로 쓰시려면

$config['index_page'] = '';

로 두셔야 합니다.
index.php? 로 바꾸는 것이 아닙니다.

또 abc.com/?test 처럼 나온다면
config.php 에서 enable_query_strings 가 켜져 있는지도 확인해보셔야 합니다.

보통은 아래처럼 설정합니다.

$config['index_page'] = '';
$config['enable_query_strings'] = FALSE;

그리고 .htaccess 는 아래처럼 많이 씁니다.

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

즉,
index_page 는 비우고,
query string 방식은 끄고,
htaccess 로 /test 를 index.php/test 로 내부 rewrite 하시면 됩니다.

참고로 사이트가 루트가 아니라 하위 폴더에 있다면
RewriteBase /폴더명/
으로 맞춰주셔야 합니다.