2013-06-24 39 views
2

在我的(drupal)網站上我有一個pdf可以查看/下載。如何強制下載文件,而不是通過.htaccess根據用戶代理在瀏覽器中查看?

http://www.mysite.de/assets/thefile.pdf 

火狐還能夠查看PDF文件瀏覽器裏面,而不是下載它。問題是,PDF查看器是鬼鬼祟祟的,至少對於我們的< win7用戶來說。

我不是那個熟悉的.htaccess,但我想這是可以設置一個文件頭,它告訴瀏覽器下載文件。但是,我怎樣纔能有條件地取決於用戶代理?

至於我發現,目標用戶代理是/.*(windows nt 5\.1).*(firefox).*/i(火狐在Win XP和較低,可能)。

編輯:我知道我可以強制要下載的文件,像這樣:

<FilesMatch "\.(?i:doc|odf|pdf|rtf|txt)$"> 
    Header set Content-Disposition attachment 
</FilesMatch> 

但不知道如何添加另一個條件,即用戶代理。

+0

你能做到這一點使用mod_rewrite - 一個'RewriteCond'檢查用戶代理,然後'RewriteRule'使用了'T'標誌來發送一個Content-Type頭,迫使下載對話框。 http://httpd.apache.org/docs/2.0/en/mod/mod_rewrite.html#rewritecond – CBroe

回答

3

如果您想強制下載特定文件擴展名,最簡單的方法是使用AddType這是一個mod_mime指令。
對於PDF,您可以將此行添加到您.htaccess文件:

AddType application/octet-stream .pdf

的關鍵是octet-stream,這是迫使傢伙下載(下載彈出窗口的瀏覽器和禁止「打開...」項目)。


希望這有助於!


EDIT(提問者在評論的請求)
正如我得走了我試着給儘可能多的細節儘可能。
如果你的意思是添加一個用戶代理「預防」你需要這些行:

RewriteCond %{HTTP_USER_AGENT} ^UserAgentNameHere [OR] 
(...more user agents...then last one:....) 
RewriteCond %{HTTP_USER_AGENT} ^AnotherUserAgentsName 
RewriteRule ^.* - [F,L]

如果你的意思是如「只強制下載不同的瀏覽器」,您需要Apache Server v2.4,因爲您需要支持Expressions。在這種情況下,你可以這樣做:

<If "%{HTTP_USER_AGENT} == '.*MSIE.*'"> 
    AddType application/octet-stream .pdf 
</If> 

如果你的意思是別的東西,請註明(也將是巨大的,如果你能後一個問題,而不是更新/變更/評論這一個這是關係到別的東西)

+0

非常感謝!你可以添加如何我可以應用這個規則爲一個特定的用戶代理?謝謝 – Alex

+0

你的用戶代理是什麼意思? 「糟糕的機器人」,客戶端的瀏覽器/瀏覽器版本還是操作系統?需要爲 – 2013-06-24 12:44:19

+0

更多信息以及剛讀我的問題,你有更多的信息:) – Alex

相關問題