2011-05-25 114 views
3

我有一个网站有很多图像。假设这些图像存储在“/ data/images”文件夹中。另外我有一个带有水印图像的文件夹:“/ data/wimages”。原始图像和水印图像的文件名相同,但并非所有图像都有其水印副本。所以,如果水印副本呈现并传递原始图像(如果没有),我想重定向原始图像(不更改其在浏览器或html源代码中的URL)。我试图使用Apache的mod_rewrite来解决这个问题:mod_rewrite和图像重定向

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} -f # Checking if file exists and is a regular file. 
RewriteCond %{REQUEST_URI} ^.*/data/images/.*\.(gif|jp?g|png)$ [NC] # Is file an image? 
RewriteRule ^data/images/(.*\.(gif|png|jp?g))$ /data/wimages/$1 [NC] # New watermaked image url. 
RewriteCond %{REQUEST_FILENAME} !-f # If watermarked image not exists .. 
RewriteRule ^data/wimages/(.*\.(gif|png|jp?g))$ /data/images/$1 [NC,L] 

那么我恢复先前更改URL,并得到一个无限循环!

任何想法?

P.S.对不起我的英语不好。

回答

3
RewriteEngine on 

RewriteCond %{QUERY_STRING} !rewritten 
RewriteCond %{REQUEST_FILENAME} -f 
RewriteCond %{REQUEST_URI} ^.*/data/images/.*\.(gif|jpe?g|png)$ [NC] 
RewriteRule ^data/images/(.*\.(gif|png|jpe?g))$ /data/wimages/$1?rewritten=1 [QSA,NC] 

RewriteCond %{QUERY_STRING} !^rewritten=2 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^data/wimages/(.*\.(gif|png|jpe?g))$ /data/images/$1?rewritten=2 [QSA,NC,L] 
+0

非常感谢!这个对我有用。 – anton 2011-05-25 14:12:41