문제

의존도가 높은 애플리케이션에서는 .htaccess PrettyURLs(내 경우에는 CakePHP)에 대한 RewriteRules, 이 재작성에서 특정 디렉토리를 제외하도록 지시어를 올바르게 설정하려면 어떻게 해야 합니까?그건:

/appRoot/.htaccess
         app/
         static/

기본적으로 모든 요청은 /appRoot/* 에서 선택하도록 다시 작성 중입니다. app/webroot/index.php, 분석되고 해당 컨트롤러 작업이 호출되는 곳입니다.이는 다음 지시어에 의해 수행됩니다. .htaccess:

RewriteBase /appRoot

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

이제 이 재작성에서 static/과 같은 몇 가지 디렉토리를 제외하고 싶습니다.나는 이것으로 시도했다 ~ 전에 케이크 재작성규칙:

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

지금까지는 요청이 더 이상 다시 작성되지 않지만 지금은 작동합니다. 모두 요청이 건너뛰고 있습니다. 일치하지 않아야 하는 합법적인 케이크 요청도 마찬가지입니다. ^(static|otherDir).*$.

이 규칙을 여러 가지 변형해 보았지만 원하는 방식으로 작동할 수 없습니다.

도움이 되었습니까?

해결책

그리고 정답은 iiiis...

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]

다른 팁

다음 규칙에 조건을 적용할 수는 없지만 부정을 사용하여 적용할 수 있습니까? (일부 변형이 있으면 .htaccess 규칙을 잘 기억하지 못하므로 플래그가 잘못될 수 있습니다.)

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

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

이전 규칙에서 [L]을 제거합니다.

RewriteBase /appRoot

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

[L]은 "여기서 다시 쓰기 프로세스를 중지하고 더 이상 다시 쓰기 규칙을 적용하지 않음"을 의미합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top