2012-08-31 5 views
1

내 폴더 구조는 다음과 유사합니다.하나의 파일과 하나의 폴더에 액세스 할 수 있도록 .htaccess

-beta 
    +folder1 
    +folder2 
    +folder3 
    file1.php 
    file2.php 

지금 내가 모든 파일과 폴더를 제한하지만, FOLDER2 및 file2.php 어떻게 내가 이렇게 내 htaccess로 쓸 수 있지 싶습니다. 이것이 제가 작성한 것입니다.

Options +FollowSymlinks 
RewriteEngine on 
RewriteCond %{REQUEST_URI} !/folder2%$ 
RewriteCond %{REQUEST_URI} !/file2.php 
RewriteRule $ /beta/file2.php [R=302,L] 

어쨌든 위의 시스템은 한 시스템에서만 작동하지만 다른 시스템에서는 작동하지 않습니다. 내가 여기서 뭘 잘못하고 있는지 지적 할 수 있니?

감사합니다,

사하

+0

는 '%'기호가 입력 된 상태입니까? 베타 디렉토리에 htaccess 파일이 있습니까? –

+0

Jon에게이 문제를 조사해 주셔서 감사합니다. 글쎄, 안돼. 다른 사이트에서 예제를 보았습니다. 네, 베타 디렉토리에 있습니다. –

답변

3

주위에 규칙을 변경하려고 도움이되기를 바랍니다 REQUEST_URI의 insted 파일 2 :

Options +FollowSymlinks 
RewriteEngine on 
RewriteBase /beta/ 
RewriteRule ^file2\.php - [L] 
RewriteRule ^folder2 - [L] 
RewriteRule^file2.php [L,R=302] 

당신이 얻은 오류는 아마도 당신이 당신의 상태였던 % 일 것입니다.

는 크게 다른 어떤 금지를 액세스, 당신이 마지막으로 규칙을 변경할 수 있습니다하려면 :

RewriteRule^- [L,F] 

당신이 각 라인을 설명해주십시오 수 있습니다 마음을 해달라고하면?

RewriteBase 지시문을 사용하면 다시 쓰기 엔진이 상대 경로의 URI베이스가 /beta/임을 알 수 있습니다. 따라서 /으로 시작하지 않는 모든 파일/경로 이름은 자동으로 해당 기본 파일을 갖게됩니다.

다음 두 규칙은 단순히 URI와 일치하고 "012"를 사용하여 "패스 스루"를 수행합니다. 따라서 /folder2 또는 /file2.php을 요청하면 다시 작성 엔진은 아무 작업도 수행하지 않으며 아무 일도 일어나지 않는 것처럼 요청을 처리합니다. 하지만 요청이 다른 경우 처음 2 개 규칙이 일치하지 않으며 정규식이 ^이므로 모든 규칙과 일치하는 마지막 규칙이 일치합니다. 해당 규칙의 대상은 모든 것을베이스로 인해 /beta/file2.php으로 리디렉션합니다. 요청이 Folder2 폴더 또는 file2.php 위해없는 경우

대괄호의 F 플래그와 함께 금지 된 규칙은 (그 규칙이 (^)와 일치 할 것이다 그것을 통과, - 같은 일이다)하지만 F 플래그는 요청이 무엇이든지 처리하는 대신 "403 Forbidden"을 반환합니다.

+0

Jon에게 감사드립니다. 와우. 마음에 들지 않으면 각 줄을 설명해 주시겠습니까? 이 분야에 대한 지식이 매우 부족합니다. –

+0

@Abhishek 확실히, 내 편집을 참조하십시오. –

+0

브릴리언트. 매우 도움이되었습니다.설명 할 시간을내어 주신 Jon에게 다시 한 번 감사드립니다. 건배. –

0

사용 REQUEST_FILENAME 내가이 당신이 다음에 이르기까지 모든 리디렉션을 통해이 개 폴더를 통과 할 수 있도록

Options +FollowSymlinks 
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !/folder2 
RewriteCond %{REQUEST_FILENAME} !/file2.php 
RewriteRule $ /file2.php [R=302,L] 
관련 문제