2012-10-22 2 views
2

나는 내가 달성하고자하는 폴더를 다른 모든 요청이가는 MVC는/공공/IMG가는 모든 이미지 요청 인이htaccess의 mod_rewrite : 루핑을 방지하는 가장 좋은 방법은 무엇입니까?

RewriteEngine On 

# if its already been rewritten to the specific folder 
RewriteCond %{REQUEST_URI} ^/MVC/public/img/(.*)$ [OR] 
RewriteCond %{REQUEST_URI} ^/MVC/public/index.php$ 
# skip next two rules 
RewriteRule .? - [S=2] 

# rewrite image requests 
RewriteRule (.*\.(jpg|png|gif))$ public/img/$1 [L] 
# rewrite all other requests to the front controller index.php 
RewriteRule (.*) public/index.php?url=$1 [QSA,L] 

처럼 보이는/MVC가/폴더 내 htdocs에있는 .htaccess 파일을 MVC/public 폴더의 앞쪽 컨트롤러 index.php. 이러한 규칙을 설정하고 mod_rewrite가 루프하지 못하도록하는 가장 좋은 방법입니까? 건너 뛸 S 플래그를 사용

답변

4

미세하지만 단점은 :

  1. 가 읽고 조금 더 어렵다 (만약 다른 사람이 그것을보고),
  2. 새로운 규칙을 추가해야하는 경우를 이 규칙은 점점 더 복잡해
  3. 경우 생략하는 방법을 확인해야합니다, 그것은 예방의 올바른 건너 뛰는

다른 가능한 방법을 유지하기가 점점 어려워 도착 루핑 : 규칙이 이전 루프에 적용되었다 (또는 mod_alias가 리디렉션이 적용 된) 경우

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

규칙의 맨 위에이 퍼팅 즉시 모두 재 작성을 중지합니다.

그래서 다음과 같이합니다 :

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

# rewrite image requests 
RewriteRule (.*\.(jpg|png|gif))$ public/img/$1 [L] 
# rewrite all other requests to the front controller index.php 
RewriteRule (.*) public/index.php?url=$1 [QSA,L] 

찬성 : 당신이 이제까지 필요로하는 일 경우 : 2 시간이 주위 즉시 하는 죄수 ENV 검사로 끝나는 때문에 당신은, 루프 대해 걱정할 필요가 없습니다 반복하는 규칙을 작성하십시오.이 방법을 사용하면 작동하지 않습니다.

+0

감사합니다. 매력처럼 작동합니다. 그리고 나는 당신이 'S'깃발을 말한 것에 동의합니다. ENV : REDIRECT_STATUS와 관련하여 해당 환경 변수 목록과 좋은 설명이 있습니까? – Dalai

관련 문제