2016-10-08 2 views
1

URL을 통해 즉석에서 이미지를 워터 마킹하는 스크립트를 사용하고 있습니다.이미지 URL 매개 변수로 Mod_Rewrite 사용

예 : http://example.com/watermark.php?filename=assets/img/temp/temp_share.jpg은 새 이미지에 워터 마크가있는 temp_share.jpg이됩니다.

은 내가 this site에서 발전기를 사용 http://example.com/filename/assets/img/temp/temp_share.jpg

처럼 뭔가에 URL을 정리 mod_rewrite를 사용하기 위해 노력하고있어 그것은 나에게 RewriteRule ^filename/([^/]*)$ /watermark.php?filename=$1 [L]했다. 내가 http://example.com/filename/assets/img/temp/temp_share.jpg로 이동하려고 할 때

는하지만 난 내가 잘못 무슨 짓을했는지 모르겠어요 Not Found The requested URL /filename/assets/img/temp/temp_share.jpg was not found on this server.

의 오류가 발생합니다. 내 htaccess로의

전체 내용 watermark.php

ErrorDocument 400 /err.php?err=400 
ErrorDocument 401 /err.php?err=401 
ErrorDocument 403 /err.php?err=403 
ErrorDocument 404 /err.php?err=404 
ErrorDocument 500 /err.php?err=500 
ErrorDocument 502 /err.php?err=502 
ErrorDocument 504 /err.php?err=504 

Options -MultiViews 
RewriteEngine On 
RewriteBase/

RewriteRule assets/styles/style.css assets/styles/style.php [L] 
RewriteRule assets/styles/m.style.css assets/styles/m.style.php [L] 

RewriteRule ^filename/([^/]*)$ /watermark.php?filename=$1 [L] 

<FilesMatch ".(jpg|png|gif|jpeg)$"> 
ErrorDocument 404 error/stormtrooperBrokenImage.jpg 
</FilesMatch> 

<IfModule mod_headers.c> 
    Header set Access-Control-Allow-Origin http://lucycypher.com 
    Header set Access-Control-Allow-Credentials true 
</IfModule> 

내용 :

$imgpath=$_REQUEST['filename']; 
header('content-type: image/jpeg'); 
$watermarkfile="assets/img/logo_variations/logo_watermark_75.png"; 
$watermark = imagecreatefrompng($watermarkfile); 
list($watermark_width,$watermark_height) = getimagesize($watermarkfile); 
$image = imagecreatefromjpeg($imgpath); 
$size = getimagesize($imgpath); 
$dest_x = ($size[0] - $watermark_width)/2; 
$dest_y = ($size[1] - $watermark_height)/2; 
imagecopy($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height); 
imagejpeg($image); 
imagedestroy($image); 
imagedestroy($watermark); 

답변

2

[^/]은 파일 이름이 할/

에 대한 이후를 제외한 모든 문자 의 문자 클래스/filename "/ 토큰 뒤에 모든 문자를 캡처해야합니다. 이 값으로 변경해보십시오. 당신의 재 작성 모듈이 사용하고 아직도 당신이 로그 파일에 자세한 재 작성 디버깅을 가능하게 고려해야 작동하지 않는 경우, 서버를 다시 시작했을 것을 확인 삼중 후

RewriteRule ^filename/(.*)$ /watermark.php?filename=$1 [L] 

.

또한 이미지 경로에 보안 검사를 추가하는 것을 고려해야합니다. 누군가가 ../../../sensitive_uploads/1.jpg 같은 파일 이름 매개 변수를 조작하여 이미지 디렉토리의 바깥 부분으로 이동하는 것은 매우 쉽습니다.

+0

알겠습니다. 그래서 만약 내가'[^ a]를 넣어야한다면 제대로 이해한다면'a'를 제외한 모든 문자의 문자 클래스가 될 것입니다. –

+0

정확히. 여기에 더 많은 정보가 있습니다 (https://httpd.apache.org/docs/current/rewrite/intro.html#regex) 부정적인 캐릭터 클래스를 참조하십시오. – Phil

관련 문제