-1

我有一个上传照片的目录,按日期排序,如下所示:

http://mysite.com/uploads/2012-12-08/abcd.png

index.php在我的/uploads/文件夹中创建了一个.htaccess

我可以使用index.php来控制图像width&height

原始网址如下所示:http://mysite.com/uploads/?url=2012-12-08/abcd.png&width=128

这是.htaccess代码:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*) /uploads/index.php?url=$1 [QSA]
</IfModule>

如果我输入 url:http://mysite.com/uploads/2012-12-08/abcd.png&width=128将出现调整大小的图像

但问题是浏览器将图像扩展名显示为png&width=128

在某些论坛中也无法显示图片网址,因为 & 符号

我怎样才能改变.png&width=128.png?width=128?

还有两个查询字符串

最大值:?url=$&width=$&height=$&rotate=$&filter=$&

我尝试了以下规则:

RewriteCond %{QUERY_STRING} (.+)
RewriteRule ^(.*)$ /uploads/index.php?url=$1&%1 [QSA]

但显示http错误500

我尝试了很多规则,但没有一个有效..

请帮忙!

4

1 回答 1

1

这不是将 url 更改为不同模式的问题。你采取了错误的方法。现代浏览器在保存某些下载的对象时会建议一个文件名。该文件名建议基于请求下载时交付服务器指定的标头。标头带有一些额外的元信息,描述发送到浏览器的实际内容是什么。

当无法从接收到的标头中提取可用信息时,浏览器仅使用 url 模式来建议文件名。

所以你要做的是发送propper header,然后每个浏览器都会使用一个建议的名称。如果你用谷歌搜索的话,有很多关于这个的条目。作为起点,在发送实际图像之前在 index.php 脚本中使用它:

<?php
// the mime type of the object, replace 'image/png' dynamically as required
header('Content-Type: image/png');
// the suggested file name, obviously you can dynamically replace 'image.png'
header('Content-Disposition: Attachment;filename=image.png'); 
// NOW send the content (the image)
?>

作为替代方案,您可以使用不同的处置。“附件”强制下载图像,“内联”建议内联显示而不是下载。这只有在对象的 mime 类型实际上可以内联显示时才有效:

<?php
// the mime type of the object, replace 'image/png' dynamically as required
header('Content-Type: image/png');
// the suggested file name, obviously you can dynamically replace 'image.png'
header('Content-Disposition: inline;filename=image.png'); 
// NOW send the content (the image)
?>

无论你做什么,阅读这些东西是如何工作的以及你有什么选择和替代方案肯定是有意义的。这是真正了解正在发生的事情的唯一方法,这是实现代码时最重要的事情之一。我建议你从阅读 phps header()函数开始。

于 2012-12-09T10:47:02.813 回答