2010-08-11 3 views
0

다음과 같은 폴더 구조가 있습니다./img/products/{product name}/그리고 하위 폴더 인 hi, low 및 thumb.htaccess에서 명명 된 하위 폴더를 지정하는 방법은 무엇입니까?

htacess를 사용하여 'hi'또는 'low'하위 폴더의 파일을 강제 다운로드 ('엄지 손가락'제외)하고 싶습니다.

이제
<FilesMatch "\(.*)(\/hi|\/low)(.*)"> 
ForceType applicaton/octet-stream 
</FilesMatch> 

내가 정규식 잘 모르겠지만, 그

/IMG/제품/활성과 같은 경로에 대한 정규식 테스터에서 작동하는 것 같다 :

I는 다음과 같이 일하는 것이 기대했다 /low/something.jpg

사이트에서 작동하지 않습니다.

제안 사항?

감사

피트

+0

정확한 코드를 시작점으로 표시 할 수 있습니까? –

+0

죄송합니다. 코드가 있었지만 코드로 표시되지 않았으므로 제대로 표시되지 않았습니다. –

답변

2

이것은 아마 내가 당신이해야 할 노력하고 있다는 생각을 기반으로 ServerFault 질문이었다, 그러나해야 당신은 실제로 당신이하려고하는 일을 할 수 없기 때문에 (당신이 그것을하려는 방식이라고 생각합니다) 나는 두 가지 대안을 제공 할 것입니다; 하나는 작동하지 않을 가능성이 있고 다른 하나는 PHP 스크립트가 포함되어 있습니다 (질문에 대한 기록에서 PHP에 대해 이전에 묻는 것을 보여주기 때문에).

문제점 :

첫째, 내가 틀렸다면 당신이 날 수정할 수 있도록 수행하려는 생각 :

# Apply ForceType to anything that's in a path that matches this 
<FilesMatch "img/products/[^/]+/(hi|low)/[^/]+$"> 
    ForceType applicaton/octet-stream 
</FilesMatch> 

그러나이 작동하지 않습니다 , FilesMatchexamines the filename이므로 .htaccess 파일을 적절하게 배치하거나 서버 또는 가상 서버 구성에서 Directory 문으로 지시문을 결합 할 수 있습니다.

당신의 경우에는 이것은 불가능합니다. (음, 어쨌든, 당신은 필요한 구성에 액세스 할 수 있습니다. 그러나 귀하의 질문에 .htaccess이라는 태그가 붙어 있기 때문에 아마도 .htaccess 모든 폴더에 파일이 현실적이지 않습니다.

솔루션 : 파일 이름 해결의 길을 부두의 모든 종류의 수행과 함께

그것이 나오는 것에 따라, mod_rewrite는 또한 당신에게 당신이 필요 할 수 없었을 것입니다 다른 아파치 기능의 확장을 제공합니다 그렇지 않으면 사용합니다. , 이것은 실제로 매우 잘 작동

RewriteEngine On 

# Force the MIME-type, but don't actually perform a rewrite 
RewriteRule ^img/products/[^/]+/(hi|low)/[^/]+$ - [T=application/octet-stream] 

하지만 기회는 아파치 설치가 당신보다 더 알고 있다고 생각하는 것이 좋다 : 적절한 예, 우리는 쉬운 해결책이는 T 플래그를 사용하여 만드는 MIME 타입을 설정할 수 있습니다 jpg 확장자를 image/jpeg으로 매핑하는 기본 구성에 mimes.types 파일을 포함합니다. 이 값은 RewriteRule보다 우선하므로이 경우 효과가 없습니다.

다른 해결책은 적절한 헤더와 이미지 데이터를 서버에서 클라이언트로 전달하여 중간에서 역할을하는 작은 스크립트를 만드는 것입니다. 당신은 그 스크립트에 요청을 전달하는 mod_rewrite을 사용 :

스크립트 자체에 관해서는
RewriteEngine On 

# For an added bit of sanity, make the test pattern even more restrictive 
RewriteRule ^img/products/[A-Za-z._-]+/(hi|low)/[A-Za-z._-]\.[A-Za-z]+$ imageDownloader.php 

이 터무니없이 긴 얻기에서이 대답을 유지하기 위해, 나는 그것의 것을 염두에두고, taking a look at this answer 제안 또는 other questions on this topic 중 하나 보안상의 이유로 다운로드 할 수있는 파일 이름을 화면에 표시해야합니다. 원래 요청 경로를 $_SERVER['REQUEST_URI']에서 가져올 수 있으며이를 사용하여 올바른 이미지를 찾을 수 있습니다.

관련 문제