2010-08-04 10 views
5

Windows 용 Apache가 설치되었습니다. 나는 CodeIgniter Professional을 사서 소스 코드를 다운로드했다. 그것은 .htaccess를 웹 사이트의 루트 폴더에 두어야한다고 했지. 기본 URL을 http://127.0.0.1/kids/으로 설정합니다. 여기서 kids는 웹 사이트의 루트 폴더입니다. 그것은 홈페이지를 잘 보여주었습니다. 링크를 클릭하면 항상 404 오류가 발생합니다. "요청한 URL /index.php/welcome/cat/2가이 서버에서 발견되지 않았습니다." 나는 성공하지 못한 디렉토리에서 여러 가지 .htaccess를 시도했다. .htaccess 내부에서 다음과 같이 지시합니다.Codeigniter가 올바르게 라우팅되지 않습니다.

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

왜 전혀 작동하지 않는지 설명하십시오. configs.php도 확인했는데 괜찮은 것 같습니다. config [ 'index_page']는 공백으로 설정됩니다. .htaccess 파일을 삭제했지만 "요청한 URL/kids/welcome/cat/2는이 서버에서 발견되지 않았습니다."

시간을 낭비하고 시간을 낭비했습니다. 인내심을 잃고 있습니다. 여기

는 "당신은 또한 당신의 웹 사이트의 루트 폴더에있는 작은 htaccess로 파일을 작성해야합니다 CodeIgniter의에 해당 폴더에 액세스 할 수 있도록하려면 무엇을 그 htaccess로 파일은 다음과 같습니다. 여기

는 CodeIgniter의 전문의 명령입니다 같을 것이다 그것은 기본적으로 웹 사이트에 볼 수 있도록 특정 파일 및 폴더를 allmvs 지침이 포함. 아파치에 mod_rewrite를 잘 알고있는 경우

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

, 당신은이 규칙이 표면 상에서의 index.php를 제거주의 것 어떤 목적지의 URL. CodeIgniter를 구성 할 때 (그리고 보통 config.php 파일), 이것이 좋은 생각 인 이유를 알 수 있습니다. Apache에서 mod_rewrite에 익숙하지 않다면이 파일에 너무 겁 먹지 마십시오. 기본적으로 .htaccess 파일에는 몇 가지 규칙이 있으며, 그 중 하나는 모든 URL에서 index.php를 제거합니다. 파일의 다른 규칙에 따라 앞으로 필요하게 될 다양한 다른 폴더 (예 : CSS, JavaScript, Captcha 파일 및 이미지가 들어있는 폴더)를 사용할 수 있습니다. "

나는 지시대로 ... htaccess 파일을 루트 폴더에 넣었지만 404 오류가 발생했습니다. 루트 폴더에서 htaccess 파일을 제거하면 홈페이지가 표시됩니다 .htaccess 파일을 추가하면 404 오류가 발생합니다 .htaccess를 옮겨서 다시 실행하지 않았습니다. . 라우팅, 분명히, 아파치는 404 오류가 표시되지 것입니다 그렇지 않으면 htaccess로 이해

답변

8

경로가 올바르게 해석되지 않을 수도 있지만 확실하지 않습니다. 다음 단계를 수행하는 것이 좋습니다.

먼저 CodeIgniter 라우팅을 위해 PATH_INFO을 사용하지 마십시오. 필요하지 않습니다. 이에 .htaccess 파일을 변경합니다

RewriteEngine On 

RewriteCond $0 !^(index\.php|images|captcha|css|js|robots\.txt) 
RewriteRule ^.*$ index.php [L] 

그런 다음, 구성에, $config['uri_protocol']AUTO로 설정되어 있는지 확인하십시오 (기본, 저는 믿습니다) 또는 REQUEST_URI.

그 다음으로 가장 일반적인 원인은 경로에 URL에 슬래시가 있어야한다는 것입니다.나는 특정 설정이 구성되는 경우 CodeIgniter의에 대해 충분히 알고 모르겠지만, 당신은 당신의 URL은 다음과 같은 설정 지시어와 후행 슬래시가 발생할 수 있습니다 : mod_rewrite가 있는지 확인 :

$config['url_suffix'] = "/"; 

편집을 뿐만 아니라 일하고 있습니다. RewriteEngine 지시 한 후, 당신의 .htaccess 파일의 상단이 시도 : 당신은 스택 오버플로 리디렉션 경우

RewriteRule .* http://stackoverflow.com/ [L,R] 

는, 적어도 우리가이 일하고 알 수 있습니다. 그렇지 않은 경우 500 오류가 발생하지 않으므로 .htaccess 파일에 문제가있을 수 있습니다.이 경우 디스크 구성에서 서버 구성의 <Directory> 항목이 AllowOverride All으로 설정되어 있는지 확인해야합니다.

편집 : 슬래시에 대해 잘 알고 있어야합니다. 죄송합니다. 이 문제는 mod_rewrite이 디렉토리 당 (.htaccess) 컨텍스트에서 작동하는 방식 때문에 발생합니다.

URL을 다시 작성한 후 mod_rewrite과 어떤 관련이 있는지 확인합니다. URL이 로컬 리소스를 가리키고 선행 슬래시를 포함하면 mod_rewrite이있는 그대로 둡니다. 그렇지 않으면 디렉터리 당 접두사가 추가됩니다.

그대로두면이 경우 내부 /index.php으로의 내부 리디렉션은 호스트 (로컬 호스트)의 정규화 된 URL로 간주됩니다. 따라서 요청한 리소스는 http://localhost/index.php이됩니다. 디렉터리 당 접두사가 추가되면 재 작성 엔진의 나중 단계는 경로에서 DocumentRoot을 제거하려고 시도합니다 (있는 경우). 이로 인해 /kids/index.php으로 남겨지며 내부 리디렉션에 전달되어 예상대로 해결됩니다.

+0

이 작동하지 않습니다. . 그것은 또한 내 편집을 참조하십시오. 당신은 아직 아무것도. – netrox

+0

@netrox의 Hmm..interesting ... 지시 무엇을 했습니까. 홈페이지는 404 오류를 표시하는 원인이 잘하면 우리가 거기에서 작업 할 수 있습니다. –

+0

팀은, 디버그 팁 주셔서 감사합니다 .. 나는 추가 라인에 유래하는 라우팅하고는 문제없이 재 않았다. (좋은 디버깅 팁!) obviousy 아파치는 htaccess로 파일을 이해한다. – netrox

0

을이을 시도해보십시오.

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^(.*)$ /index.php/$1 [NC,L] 

가 t에 넣고 그는 index.php가있는 키즈 폴더입니다.

+0

도 작동하지 않습니다. :(루트 폴더에 URL을 넣은 후 URL이있는 링크를 클릭하면 FF로 "요청한 URL /index.php/welcome/cart/3을 찾을 수 없습니다." – netrox

관련 문제