2013-02-26 1 views
0

나는 내 htaccess로 파일에 다음 한 :이 라우팅에서 404 오류가 발생하는 이유는 무엇입니까? 내 웹 루트 (VAR/WWW)에서

RewriteCond %{REQUEST_URI} ^system.* 
RewriteCond $1 !^(index\.php|vges|images|robots\.txt) 


RewriteCond %{REQUEST_URI} ^application.* 
RewriteRule ^(.*)$ /test/index.php?/$1 [L] 


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

내가 다음 CodeIgniter의 프로젝트와 하위 디렉토리 (은/var/www /에서 테스트)를 가지고있다. 또한 다음과 .htaccess 파일이 있습니다

RewriteEngine On 
RewriteCond $1 !^(index\.php|quiz|vges|buddy|css|fonts|img|images|js|robots\.txt) 
RewriteRule ^(.*)$ /index.php/$1 [L] 

내가 로컬 호스트 내가 테스트 디렉토리를 볼 수 있습니다 방문하여 내가 테스트 디렉토리로 이동 때 기본 컨트롤러보기로 표시하고 있습니다

.

The requested URL /index.php/events was not found on this server. 

편집 : 나는 로컬 호스트/테스트/컨트롤러를 방문 할 때하지만 404 찾을 수 없음 오류가

RewriteRule ^(.*)$ test/index.php/$1 [L] 
: 나는 마지막 줄을 변경하여 해결책을 발견은에 /var/www/vges.htaccess

프로젝트를 서버에 업로드하는 경우 하위 디렉토리가 아닌 것으로 의심되지만 오류가 발생할 수 있습니다. 이것에 가장 좋은 해결책은 무엇입니까? 내 htaccess로 파일에 어떤 변경해야하므로

    내가
  1. 은 내가하지 않아도 서버 (예 : 테스트 프로젝트 등) 개별 프로젝트로 업로드 할 때 내 로컬 컴퓨터에 서브 디렉토리를 가질 수
  2. .htaccess 파일을 수정합니다.

감사합니다.

+1

[RewriteBase] (https://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritebase) 지시어가 유용 할 수 있습니다. 어쨌든 내 경험으로 볼 때, 가능하다면 동일한 .htaccess 파일을 개발 및 제작에 사용하는 것은 매우 어렵습니다. 나는 대담하고 용감한 사람들이 "자동적으로"변환을 처리 할 스크립트를 작성하려고 노력할지도 모른다고 상상한다. 그러나 그 말은 그리 간단하지 않다. – kjetilh

답변

1

먼저 .htaccess 파일은 자신이있는 디렉토리와 모든 하위 디렉토리에 적용됩니다. CodeIgniter 관련 규칙은 보통 var/www/test/ CI 디렉토리에 있어야합니다. 대개 CI의 index.php 파일이있는 곳이면됩니다.

두 번째로, 루트 .htaccess는 이상합니다. 규칙이 실행될 때까지 RewriteCond 조건이 누적 된 다음 다시 설정됩니다. URI가 둘 다 시작할 수 없으므로 두 개의 %{REQUEST_URI} 조건이 서로 충돌합니다. 이 .htaccess 규칙이 무엇을하는지 잘 모르겠지만 루트에서 시작하는 URL이 CI 애플리케이션과 아무런 관련이 없다면 처음부터 URL이 필요하다고 생각하지 않습니다. 필자의 디렉토리 구조와 웹 사이트 작동 방법을 모른 채 말할 수는 없습니다.

kjetilh가 맞습니다. 환경이 정확히 동일한 설정을 공유하지 않는 한 .htaccess는 보편적으로 작동하지 않을 수 있습니다. 가장 좋은 방법은 가능한 한 간단하게 시작하고 필요에 따라 수정하는 것입니다. (제대로 정규 표현식 문자 등을 탈출 기억 당신은 당신의 자산 디렉토리 또는 세 번째 RewriteCond 리디렉션하지 않을 경로를 추가 할 수 있습니다

RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond $1 !^(favicon\.ico|robots\.txt) 
RewriteRule ^(.*)$ index.php/$1 [L] 

: CI의 2.1.x의를위한 좋은 시작 htaccess로 뭔가처럼 마침표로). RewriteBase 규칙은 CI가 하위 디렉토리에 있으면 편리합니다. 또한 2.1.x에서 시스템 및 응용 프로그램 폴더 참조가 필요하지 않습니다.이 폴더는 자신의 .htaccess 파일이 해당 폴더에 대한 액세스를 차단하기 때문입니다.

관련 문제