.htaccess 지시어는 특정 URL을 리디렉션하지 *않습니다*
-
08-06-2019 - |
문제
의존도가 높은 애플리케이션에서는 .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]은 "여기서 다시 쓰기 프로세스를 중지하고 더 이상 다시 쓰기 규칙을 적용하지 않음"을 의미합니다.