2012-12-09 41 views
-1

我對上傳的照片的目錄,與日期排序,像這樣:致命的.htaccess錯誤

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

,我創建了一個index.php/uploads/文件夾內有.htaccess

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

原始url看起來像這樣: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

也由於&符號

我怎樣才能改變.png&width=128.png?width=128?

是有兩個以上的查詢字符串

最大:URL = $ &寬度= $ &高度= $ &旋轉= $ &過濾器= $ &

我已經嘗試瞭如下規則:

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

但顯示HTTP錯誤500

我已經嘗試了很多規則,但沒有人工作..

請幫忙!

回答

1

這不是將url更改爲不同模式的問題。你採取錯誤的做法。當保存一些下載的對象時,現代瀏覽器會建議一個文件名。該文件名稱建議基於請求下載時傳遞服務器指定的標題。這些頭文件帶有一些額外的元信息,用於描述發送給瀏覽器的實際內容。

只有當瀏覽器沒有從收到的頭文件中提取可用信息時纔會使用url模式來建議文件名。

所以你想要做的是發送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()函數開始。

+0

我添加了這段代碼,但瀏覽器自動下載了圖像,任何解決方案? –

+0

我以爲那是你想要的。 '附件'用於強制下載。如果要顯示圖像,請改爲使用「內聯」而不是「附件」,如第二個示例所示。 – arkascha

+0

但如果我使用附件第一次加載圖像將顯示在瀏覽器中不下載,擴展名仍然.png&width = xxx.need刷新頁面開始下載... –