2008-08-06 3 views
18

내 PrettyURL (예 : CakePHP)에 대해 .htaccess RewriteRules을 많이 사용하는 응용 프로그램에서이 재 작성에서 특정 디렉토리를 제외하도록 지시문을 올바르게 설정하려면 어떻게해야합니까? 즉 : /appRoot/*에 대한 모든 요청이 다시 작성되고 기본적으로.htaccess 지시어로 특정 URL 리디렉션 안 함 *

/appRoot/.htaccess 
     app/ 
     static/ 

이 분석되고있어 및 해당 컨트롤러 액션이 호출되고 app/webroot/index.php,에 의해 선택 될 수 있습니다. 이것은 .htaccess에서 이러한 지침에 의해 수행됩니다

RewriteBase /appRoot 

RewriteRule ^$ app/webroot/  [L] 
RewriteRule (.*) app/webroot/$1 [L] 

내가 지금이 재 작성에서/정적과 같은 몇 가지 디렉토리를 제외 할. 나는이 전에 케이크의 RewriteRules으로 시도 :

RewriteCond $1 ^(static|otherDir).*$ [NC] 
RewriteRule (.*) - [L] 

그것은 지금까지 요청이 더 이상 재 작성되어있는 것을 작동하지만, 지금 모든 요청, ^(static|otherDir).*$ 일치하지합니다 심지어 합법적 인 케이크 요청을 생략되고있다.

이 규칙의 여러 변형을 시도했지만 원하는대로 작동하지 않습니다.

답변

6

그리고 정답은 iiiiis ...

RewriteRule ^(a|bunch|of|old|directories).* - [NC,L] 

# all other requests will be forwarded to Cake 
RewriteRule ^$ app/webroot/ [L] 
RewriteRule (.*) app/webroot/$1 [L] 

루트 디렉토리에 index.php 파일은 심지어 장소에 이러한 지침을 처음 호출 된 이유를 나는 아직도하지 않습니다. 현재는

/appRoot/app/views/pages/home.ctp 

에 위치하고 있으며 Cake를 통해 처리됩니다. 지금이 위치에서, 나는 이것이 잘 동작했을 것이라고 생각한다. (약간 변형 된 Mike의 제안, 테스트되지 않은 버전) :

RewriteCond $1  !^(a|bunch|of|old|directories).*$ [NC] 
RewriteRule ^(.*)$ app/webroot/$1 [L] 
1

이전 규칙에서 [L]을 제거

RewriteBase /appRoot 

RewriteRule ^$ app/webroot/     
RewriteRule (.*) app/webroot/$1 

[L]을 의미한다 "여기 다시 쓰기 프로세스를 중지하고 더 이상 재 작성 규칙을 적용하지 않습니다."

1

는 다음과 같은 규칙에 조건을 적용 할 수 없습니다 만, 부정으로, 같이 (그 어떤 변화와 함께, 나는 htaccess로 규칙을 기억 너무 좋지 않다, 그래서 플래그 잘못 될 수도 있습니다) :

RewriteCond $1 !^(static|otherDir).*$ [NC] 
RewriteRule ^$ app/webroot/ [L] 

RewriteCond $1 !^(static|otherDir).*$ [NC] 
RewriteRule ^$ app/webroot/$1 [L] 
관련 문제