2010-04-22 2 views
0

하위 디렉토리와 파일을 만들고 저장하는 디렉토리 ("files")가 있습니다. 디렉토리는 "옵션 색인"을 사용하여 디렉토리 목록을 전달해야하지만 사용자가 인증되고 권한이 부여 된 경우에만 전달해야합니다. 다음 부분을 수행하여 해당 부분을 만들고 작동시킵니다."options indexes"와 함께 사용하는 mod_rewrite

<Directory /var/www/html/files> 
    Options Indexes 
    IndexOptions FancyIndexing SuppressHTMLPreamble 
    HeaderName /includes/autoindex/auth.php 
</Directory> 

이제 파일 전송을 처리해야합니다.

RewriteCond %{REQUEST_URI} -f 
RewriteRule /files/(.*) /auth.php 

나는 또한 시도 : 두 지시어 auth.php에 리디렉션되지 않습니다

RewriteCond %{REQUEST_URI} !-d 
RewriteRule /files/(.*) /auth.php 

내가 요청할 때 :

foo.com 파일에 대한 인증을 강제로, 나는 다음과 구축 /files/bar.pdf
foo.com/files/baz/bar.pdf

아이디어가 있습니까? 이것이 문제입니다,하지만 난 이것에 대한 REQUEST_FILENAME을 사용하고로 캡처 (.*)의 가치를 원한다면하지 REQUEST_URI

  • 것은 반드시 재 작성이 RewriteEngine on
  • 활성화되어 있는지 확인하면

  • 답변

    0
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} -f 
    RewriteRule ^/files/(.*) /auth.php?file=$1 [NC,L] 
    
    • 확실하지 않음 스크립트에 전달 된 경우, 다음을 사용하여 값을 전달하는 방법/위치를 Apache에게 알려야합니다. $1
    • 규칙의 시작 부분에 ^을 추가하여 매트 칭 /files/blah.txt이고, 말하자면, /foo/files/blah.txt이 아닙니다.
    • [NC,L]을 추가하면 대/소문자를 구분하지 않고 일치하는 규칙을 사용하고 처리 규칙을 중지합니다.
    +0

    REQUEST_URI를 REQUEST_FILENAME으로 변경하고 정규 표현식의 처음에 ^를 추가 한 다음 다시 작성 규칙의 끝에 "[NC, L]"을 추가했습니다. 요청 된 파일을 쿼리 문자열 param으로 전달할 필요가 없습니다. PHP가 SERVER superglobal을 통해이를 캡처 할 수 있기 때문입니다. "foo.com/files/bar/baz.pdf"에서 "-f"플래그를 사용할 때 mod_rewrite를 트리거 할 수 없습니다. "! -d"로 전환하면 mod_rewrite가 "foo.com/files/bar/baz.pdf"를 트리거하지만 "원하지 않는"foo.com/files/bar/에도 트리거합니다. – Travis