我们以多种尺寸缓存图片。
图片信息:
因此,我们构建了以下图像缓存URL:
http://cache.example.com/image/120x150/ksjdaflkj678687TYTGGGShjk78/image-file-name.jpg
当请求此URL http://cache.example.com/image/120x150/ksjdaflkj678687TYTGGGShjk78/image-file-name.jpg时,会在幕后(htaccess类型的东西)将其重写为:http://cache.example.com/image.php?height=120&width=150&originalUrlHashed=ksjdaflkj678687TYTGGGShjk78&preferredFileName=image-file-name.jpg
散列图像被解码,从原始位置下载,调整大小并物理保存在此处:/ image / 120x150 /ksjdaflkj678687TYTGGGShjk78 / image-file-name.jpg。 为什么?因为在第二个请求中,文件实际存在于磁盘上并作为普通文件返回,然后我们可以使用apache2 mod_expires缓存,而不是在每次请求时下载并调整图像大小。
问题出在这样的远程图像网址上:
原始图像哈希是:
这使得网址如下所示:
此网址的哈希部分超过255个字符,这使得Apache错误 - https://serverfault.com/questions/120397/max-length-of-url-257-characters-for-mod-rewrite
编辑:只是添加 - 问题在于哈希的长度。如果散列低于255个字符,则此解决方案可以完美运行。
这里有几个注意事项:
解决方案?
有没有人有任何想法?
我遇到的问题与this question非常相似。
答案 0 :(得分:0)
上次检查时,网址最多可容纳2083个字符。我怀疑是否有一种算法可以使其适合少于255个US-ASCII字符。
由于您似乎是首先生成URL的那个,我只是将目标URL存储在服务器上(例如,在数据库表中)并使用其关联的ID(或实际的哈希)。然后,从ID或散列中获取URL将是微不足道的。
GET方法不是为传输大量数据而设计的。
修改强>
我的回答显然不够明确,所以我会试着澄清一下。
假设您要链接到http://www.example.com/media/test.jpg
。到目前为止,您将http://www.example.com/media/test.jpg
混淆为例如uggcabcjjjwrknzcyrmpbzjzrqvnxgrfgwwct
并生成如下网址:
http://cache.example.com/image/150x125/uggcabcjjjwrknzcyrmpbzjzrqvnxgrfgwwct
我的建议是将URL存储到数据库表中:
url_id url
====== =====================================
1 http://www.example.com/media/test.jpg
...并创建一个这样的网址:
http://cache.example.com/image/150x125/1
当你mod_rewrite URL时,你运行这个查询:
SELECT url
FROM url_cache
WHERE url_id=1
...而且,瞧!,你有http://www.example.com/media/test.jpg
,而不需要在网址中传输它。
或者,您可以存储和使用真实的哈希:
url_id url hash
====== ===================================== =====
1 http://www.example.com/media/test.jpg ae4a962c5c40dc8d59554a503719ce445c047246837c7203d319cd5b0b5b3703
......和:
http://cache.example.com/image/150x125/ae4a962c5c40dc8d59554a503719ce445c047246837c7203d319cd5b0b5b3703
因为它是一个真正的哈希而不是一个模糊的文本,你知道它的大小。