致命.htaccess错误

时间:2012-12-09 10:33:58

标签: php .htaccess directory rewrite

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

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>

如果我输入网址:http://mysite.com/uploads/2012-12-08/abcd.png&width=128将显示已调整大小的图片

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

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

如何将.png&width=128更改为.png?width=128?

还有两个查询字符串

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

我尝试过以下规则:

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

但显示http错误500

我尝试了许多规则,但没有人工作..

请帮忙!

1 个答案:

答案 0 :(得分:1)

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

当从收到的标题中无法提取可用信息时,网址模式仅供浏览器用于建议文件名。

所以你要做的是发送propper标题,然后每个浏览器都会使用建议的名称。如果你谷歌的话,有很多条目。作为起点,在发送实际图像之前在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()功能的内容。