2011-12-10 1 views
0

때때로아파치가 mod-rewrite를 사용하여 url 인코딩을 리터럴 파일 이름으로 보이게 할 수 있습니까? 나는 불행하게도 <p><code>kitty%2Bcat.jpg</code></p> <p>(문자 그대로 거기 % 2B로)하지만</p> 가끔 저장된 이미지가 이전의 웹 사이트를 처리하고

kitty+cat.jpg

(하나 또는 다른 등 브라우저가이 litera을 찾으려고하지 키티 %의 2Bcat.jpg에 대한 요청을 불행하게도 때, 둘은)

존재합니다 이 파일 이름은 kitty + cat.jpg가있는 경우 제공됩니다 (그렇지 않은 경우). 404s

kitty % 2Bcat.jpg가 요청되었지만 kitty + cat이되도록 일부 다시 쓰기 규칙을 사용할 수 있습니까? jpg가 존재하지 않고 kitty % 2Bcat.jpg가 실행되면, kitty % 2Bcat.jpg가 제공됩니까?

일부 논리는 이미징 중이지만 일부 조각은 여전히 ​​누락되었습니다.

RewriteCond %{REQUEST_FILENAME} \%2B 
RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule . %{REQUEST_FILENAME} [L] 

- 어떻게 아파치가 문자 그대로 서버를 제공합니까?

아마도 실제로 아파치 키티 + 고양이로보고 결코 %의 2B로 검사 할 수있는 기회를 얻을 수 없기 때문에이 같은 다른 뭔가를해야?

RewriteCond %{REQUEST_FILENAME} \+ 
RewriteCond %{REQUEST_FILENAME} \.(jpg|gif|png)$ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)\+(.*)$ $1\%2B$2 [L] 

그러나 불행하게도 그 여러 %의 2B 및 기타 인코딩이있을 수 있으므로 충분히 강력하지 않다.

+0

를 작동 할 수 있음을 보인다 % 2B ~ +? –

+0

그것에 대해 좀 더 생각해 보면, 기술적으로 파일이 키티처럼 요구되어서는 안됩니다. % 252Bcat.jpg ... %는 URL 인코딩되어야합니다. –

답변

1

플래그 없음 - 탈출을 [NE]을 시도하지 http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriterule

그래서 어둠 속에서

RewriteCond %{REQUEST_FILENAME} !-f [NE]

샷, 그것은 가능 모든 파일의 이름을 변경하는 것이

+0

오, 와우, 완전히 그 중 하나를 놓쳤습니다! 최종 RewriteRule에서도 NE를 사용할 수 있을지 궁금합니다. –

+0

불행히도 일부 바이올린을 치기 전에 NE는 이스케이프 처리되지 않은 URL을 전달하는 최종 재 작성 규칙을 의미한다고 생각하고 디코딩되기 전에 원래 URL을 검토하는 데 아무런 영향을 미치지 않습니다. –

관련 문제