2009-11-02 4 views
0

코어가 프로젝트 네임 스페이스 인 곳에서 애플리케이션을 설정하려고합니다. core는 프로젝트 사용자 정의의 기본 폴백입니다. 이를 ID에 CSS와 같은 다양한 자원을 단계적으로 할 수처럼, excersize의 목적을 위해 자바 스크립트 등mod_rewrite를 사용한 계단식 리소스 선택

으로이 단순화 필자
./.htaccess 
./first/firstonly.txt 
./first/both.txt 
./second/secondonly.txt 
./second/both.txt 
요청이 찾기 전에 먼저 존재를 확인 할 것

예상되는 동작 두 번째, 그리고 마지막으로 base을 위해 404

을 던지는/firstonly.txt은 base을/secondonly.txt 반면
는 (404 ./first/secondonly.txt 시도 할 것이다, (200) ./first/firstonly.txt 충돌 것) 다음 ./second/secondonly.txt (200).
baseurl/both.txt는 ./first/both.txt (200)에 도달하고 더 이상 진행하지 않습니다.
baseurl/nonexistant.txt (404)는 계단을 통과하여 돌아올 것입니다.

저는 mod_rewrite에 상당히 경쟁적이어서 여기서는 기본 지식을 말할 필요가 없습니다. 이것을 구현하는 가장 효율적인 방법은 무엇입니까? 대부분의 시간이 첫 번째 히트에서 발견 될 것이므로 걱정하지 마세요. 은 -f 검사 만에 정확하다는 것을 알아 차리지

RewriteEngine on 
RewriteRule ^(first|second)/ - [L] 
RewriteCond %{DOCUMENT_ROOT}/first/$0 -f 
RewriteRule ^[^/]+$ first/$0 [L] 
RewriteCond %{DOCUMENT_ROOT}/second/$0 -f 
RewriteRule ^[^/]+$ second/$0 [L] 

답변

0
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f 
RewriteRule ^Public/(.*)$ Application/Public/$1 [L] 

RewriteCond %{ENV:REDIRECT_STATUS} 200 
RewriteRule .* - [L] 

RewriteRule ^(css|scripts|images|assets|flash)/(.*)$ Public/$1/$2 [L] 

위의 샌드 박스 예제 외부의 최종 해결 방법입니다.

0

는 이러한 규칙을보십시오 전체 경로 이름은 문서 루트에없는 경우 까다로울 수 있습니다. 파일을 다시 쓰고 request_uri에서 -f를 사용하면이 문제를 해결할 수 있습니까?

+0

아, 그렇습니다. 필자 자신이 생각하는 것과 비슷한 해결책을 제시하고 있지만, 문서 루트에있는 프로젝트의 루트에 의존합니다. 항상 발생하지는 않습니다. .htaccess (현재의 고집 점)와 관련하여 행복하게 작업 할 수 있어야합니다. – jhogendorn

+0

@devians : 대신'RewriteCond first/$ 0 -F'를 시도하십시오. – Gumbo

+0

작동하지 않는 것처럼 재기록 체크를하는 경우에는 전체 경로가 필요합니다. – jhogendorn

0

일부 다른 잠재적 인 솔루션

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !^first 
RewriteCond %{REQUEST_URI} !^second 
RewriteRule ^([^/]+\.?[^/])*$ first/$1 [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !^second 
RewriteRule ^first/([^/]+\.?[^/])*$ second/$1 [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !^(first|second).*$ 
RewriteRule .* /404.html [L] 

또는 내 개인적인 테스트 메신저에서

RewriteCond %{REQUEST_URI} 404.html 
RewriteRule .* - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !^first 
RewriteCond %{REQUEST_URI} !^second 
RewriteRule ^([^/]+\.?[^/])*$ first/$1 [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !^second 
RewriteRule ^first/([^/]+\.?[^/])*$ second/$1 [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !^(first|second).*$ 
RewriteRule .* /404.html [L] 

: