2013-02-10 7 views
2

사용자가 URL로 이동하면 다음과 같이 말하십시오. http://www.domain.com/image/orange.jpg 그러나 orange.jpg은 존재하지 않지만 orange.png는 .htaccess가 사용자가 찾을 수 있도록 허용 할 수 있습니까?.htaccess는이 상황에서 나를 도울 수 있습니까?

+1

NO; htaccess는 각 요청에 대해 목록 swith 가능한 결과를 사용하지 않습니다. 왜 당신은 잘못된 URL을 echo하고 여전히 올바른 url을 찾고 싶습니까? –

+0

[Multiviews] (http://httpd.apache.org/docs/2.2/mod/mod_negotiation.html#multiviews)를 사용하면이 문제가 해결 될 수도 있습니다. 아이디어는 –

답변

1

가능해야합니다. mod_rewrite는 파일의 존재 여부를 검사합니다. [L] 플래그를 사용하여 프로세스를 적극적으로 중단하지 않을 경우를 대비하여 여러 번 재 작성을 허용합니다. .

RewriteEngine on 

RewriteCond %{REQUEST_URI} ^/image/([^/.]).jpg$ 
RewriteCond %{REQUEST_URI} !-f 
RewriteRule ^/image/([^/.]).jpg /image/$1.png 

RewriteCond %{REQUEST_URI} ^/image/([^/.]).png$ 
RewriteCond %{REQUEST_URI} !-f 
RewriteRule - /image/no-found [G,L] 

위 적용되는 중앙 서버 구성 (호스트 별 구성) 내부에 정의 된 경우 :

그래서 (검증되지 않은) 출발점으로이 같은 뭔가 시도가있다. .htaccess 스타일 파일의 경우 구문은 약간 다릅니다.이 경우 RewriteRule 내부의 슬래시 (/)가 없어야합니다. 선택이 있다면 서버 구성에서 다시 작성하십시오. .htaccess 스타일 파일은 해결 방법과 같은 오류가 발생하기 쉽습니다. 가능하다면 그들을 피하십시오.

그러나 이러한 설정은 다소 제한적이고 유지 관리가 까다 롭습니다. 요청을 처리하고 보낼 응답을 결정하기 전에 여러 가지 대안을 확인하는 작은 래퍼 스크립트 (아마 PHP 기반)를 설치하는 것이 더 좋은 대안 일 수 있습니다. 당신은 이런 식으로 요청을 다시 작성할 수 :

RewriteEngine on 
RewriteRule ^/image/([^/.])\..+$ /image.php?name=%1 

지금 당신은 당신이 서둘러하지 않고 이미지의 기존 버전을 확인하고 원하는대로 헤더와 내용을 반환 할 수있는 스크립트 image.php로 해당 요청을 제공 할 수 있습니다.

+0

+1입니다. 하지만 아마도 첫 번째 규칙은 존재할 때 요청한 파일의 확장자를 변경하는 것이고, 존재하지 않는 경우 다른 확장자를 갖는 다른 파일을 가져 오지 않을 수도 있습니다. 그래도 이것이 당신의 의도인지 확실하지 않습니다. –

+0

@faa 죄송합니다, 무슨 뜻인지 모르겠군요. 첫 번째 규칙은 JPG 변형이 존재하지 않으면 '확장자'를'.jpg' tp'.png'에서 변경하려고합니다. 이것은 OP가 요청한 것입니다. 왜 그 png 변종이 배달되지 않아야합니까? – arkascha

+0

규칙에 따르면,'png' 변형은'jpg' 확장자를 가진 요청 된 파일이 존재할 때에 만 전달됩니다. 그것은 규칙이'^/whatever ... '을 필요로하는 긍정적 인 조건이며,'무엇이든 '이 존재해야합니다. 어쩌면 당신은'! ^/whatever ... '을 의미했을 것입니다. –

관련 문제