2015-01-29 3 views
0

쉬운 프로젝트 관리를 위해 내 미디어 파일을 코드에서 분할하는 설정을 아파치에서 만들고 싶습니다. 내가 작성한 아이디어는 모든 코드 (PHP 파일, CSS 파일 등)와 미디어 디렉토리 (/ home/villermen/httpd/media)가 들어있는 루트 디렉토리 (/ home/villermen/httpd/root) 모든 비 텍스트 파일.아파치에있는 여러 루트 디렉토리의 파일 제공

이 설정을 실행하는 것은 까다로운 작업입니다. 존재하는 경우 mod_rewrite를 사용하여 미디어 디렉토리의 파일을 제공하려고 시도하고 있지만 지금까지 성공하지 못했습니다. 나는에있어,

DocumentRoot /home/villermen/httpd/root 
RewriteEngine on 

<Directory /home/villermen/httpd/root> 
    Order allow,deny 
    Allow from all 
    AllowOverride All 

    #...other magic magoo, including rewriterules that do work 
</Directory> 

<Directory /home/villermen/httpd/media> 
    Order allow,deny 
    Allow from allow 
    AllowOverride All 
</Directory> 

#Serve from media if file exists there 
RewriteCond "/home/villermen/httpd/media%{REQUEST_URI}" -f 
RewriteRule "^/?(.*)$" "/home/villermen/httpd/media/$1" 

여전히 404을 발생합니다 미디어 폴더에 존재하는 파일에 액세스하려고 : 여기

내가 마법이 일어날 수 있도록 노력하는 내 httpd.conf 파일의 일부 여기 손실. 내가보고 있는게 없니?

우분투 14.04에서 아파치 2.4를 사용하고 있습니다.

편집 : RewriteCond를 모두 삭제해도 여전히 마술은 일어나지 않습니다. mod_rewrite는 Directory 태그 외부에서 올바르게 작동해야합니까?

업데이트 : @ kannan-mohan 님의 답변을 아래에서 확인하십시오. 결국 나는 폴더에 웹 루트에서 미디어 폴더를 연결하고 거기에 모든 것을 재 작성의 접근 방식에 들어갑니다 : 나의 이해가 정확한지

DocumentRoot /home/villermen/httpd/root 
Alias /media /home/villermen/httpd/media 

<Directory /home/villermen/httpd/root> 
    #Serving files from media if they exists there 
    RewriteCond "/home/villermen/httpd/media%{REQUEST_URI}" -f 
    RewriteRule "^(.*)$" "/media/$1" 
</Directory> 

<Directory /home/villermen/httpd/media> 
    Order allow,deny 
    allow from all 
    AllowOverride All 
</Directory> 

답변

2

경우 당신이 필요로하는 것은 다음과 같습니다.

  1. http://example.com/media/hello.jpg

    파일이 다음은 HTTP 404을 통해 root 디렉토리에서 이미지를 가져 오기해야 media 디렉토리에 존재하지 않는 경우 경우 /home/villermen/httpd/media/video/world.mp4
  2. 에 그리고에 매핑해야합니다 /home/villermen/httpd/media/hello.jpg
  3. http://example.com/media/video/world.mp4에 매핑해야합니다. 그래서 http://example.com/media/video/world.mp4 충분합니다 구성 아래이 경우 /home/villermen/httpd/root/video/world.mp4

에 매핑해야합니다. 요청 된 파일 유형 jpg 또는 mp4입니다 만 다음 재 작성이 발생하는 경우도 검사합니다 RewriteCond 안전 안전 추가를 위해

<VirtualHost *:80> 
    ServerName example.com 
    DocumentRoot /home/villermen/httpd/root 

    RewriteEngine on 
    RewriteCond "%{DOCUMENT_ROOT}..%{REQUEST_URI}" -f 
    RewriteCond %{REQUEST_URI} .*\.jpg$ [OR] 
    RewriteCond %{REQUEST_URI} .*\.mp4$ 
    RewriteRule (.*) "%{DOCUMENT_ROOT}..$1" [L] 

    RewriteRule /media/(.*) /$1 [L] 

</VirtualHost> 

. 각 조건의 끝에 [OR] 플래그를 추가하여 더 많은 미디어 유형을 추가 할 수 있습니다.

+0

아니요, 실제로 달성하고자하는 것은 다음과 유사합니다. 'http : // example.com/hello.jpg'은'/ home/villermen/httpd/media/hello.jpg ' 그렇지 않으면 문서 루트에서로드해야합니다. ('/ home/villermen/httpd/root/hello.jpg'). 이 별칭 동작을 허용하지 않으므로 간단한 별칭으로는 충분하지 않습니다. – Villermen

+0

'media' 디렉토리를'DocumentRoot' 안에 둘 수 있습니다. 즉'/ home/villermen/httpd/root/media'로 미디어를 넣으시겠습니까? 왜냐하면'DocumentRoot' 밖의 파일에 대한 규칙을 다시 작성하는 것은 약간 복잡하기 때문입니다. –

+0

그래, 기술적으로 그럴 수 있습니다. 하지만 필자는 포함, 루트 및 미디어 디렉토리를 동일한 수준에서 분리하려고합니다. – Villermen

관련 문제