2011-03-14 3 views
5

을 존재하는 경우 다시 중단이 내 htaccess로이다 :mod_rewrite를하고 htaccess로 - 스크립트/파일

RewriteEngine On 



# Stop if it's a request to an existing file. 

RewriteCond %{REQUEST_FILENAME} -f [NC,OR] 

RewriteCond %{REQUEST_FILENAME} -d [NC] 

RewriteRule .* - [L] 



# Redirect all requests to the index page 

RewriteRule ^([^/])   /index.php   [L] 

지금이 내 index.php를 스크립트에 모든 것을 전달합니다! 스크립트가 존재하면 중지되지 않습니다. 누구나 이것이 왜 작동하지 않는지 알 수 있습니까? 나는 도처에 봤지만, mod_rewrite를 이해하지 못한다.

<script> 태그는 .js 파일을 웹 디렉토리에두고 index.php 스크립트로 전달하기 때문에 문제가 발생했습니다. 웹 개발자 툴바에서이 사실을 알려줍니다. :) 그리고 파이어 폭스의 뷰 소스 창에서 js 파일에 대한 링크를 클릭하면 index.php 출력도 표시됩니다.

감사합니다.

+0

, 맞나요? – vbence

+0

기본적으로 :) –

답변

8

다시 쓰기 규칙을 처리 한 후 전체 프로세스가 새 URL로 다시 시작되기 때문입니다. URL 처리는 변경 사항이 없을 때까지 (변경된 규칙이 발견되지 않을 때까지) 변경된 URL로 매번 규칙을 반복해서 통과 할 수 있습니다.

당신이 필요합니다
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule (.*)   /index.php   [L] 

이 프로그램과 규칙을 생각하지 마십시오을, 그들은 겹칠 수와 각 하나를 최대한 구체적으로해야한다 규칙입니다.

+0

안녕하세요, 귀하의 회신에 감사드립니다. 불행히도 귀하의 코드는 나에게 500 서버 오류를 제공합니다. : –

+0

@ 토마스 클레이 슨 방금 규칙을 조합했습니다. 존재하지 않는 모든 요청을'index.php'에 전달하기 위해 수정했습니다. – vbence

+0

아, 편집이 의미가 있으며 작동하는 것 같습니다! 't ... :/아 글쎄, 너와 함께 할거야. :) 고마워. –

1

나는이 같은 첫 번째 조건 후 [OR]를 추가해야합니다 같아요

당신은 일반적으로되는 index.php (404)을 초래할 수있는 모든 요청을 전달할
RewriteCond %{REQUEST_FILENAME} -d [OR] 
RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule (.*) $1 [QSA,L]