we have an application which downloads the files from the server. After the download them it needs to save it, for that it uses the filename paramter which is comming from the responce header.
When i'm using the standart PHP download.php?id=downloadID i can set the headers with no problem.
The task now is that on the client server they do not have any php available,
i need to set the filename inside of the responce header.
here is the htaccess what i have:
<FilesMatch "\.(?i:pdf)$">
Header set Content-Type: application/octet-stream
Header set Content-Disposition: "attachment; filename=FILE_NAME.pdf"
</FilesMatch>
And i have no idea how to parce the file name dynamicaly to the header using htaccess.
I've google it looked for it but still no solution.
Any suggestions?
I have no idea if it works, but this would be my first attempt.
RewriteRule [^/]+\.pdf$ - [E=FILENAME:$0]
<FilesMatch "\.(?i:pdf)$">
Header set Content-Type application/octet-stream
Header set Content-Disposition "attachment; filename=%{FILENAME}e"
</FilesMatch>
EDIT Seems some apache installs prefix the env variable with REDIRECT_
RewriteRule [^/]+\.pdf$ - [E=FILENAME:$0]
Header set Content-Type application/octet-stream env=REDIRECT_FILENAME
Header set Content-Disposition "attachment; filename=%{REDIRECT_FILENAME}e" env=REDIRECT_FILENAME
Above code doesn't work out of the box. In my case, I needed another internal redirect.
But why would you need to set the filename in the header if the request URL contains the filename too? All browsers will save the file with under the name in the URL. So going to /path/test.pdf will result in browsers suggesting the filename test.pdf.
Related
I have a pdf link that opens in a new tab, but the new pdf tab response header content-type is "text/html; charset=UTF-8" and the page is blank. If I hard refresh, the content-type becomes "application/pdf".
I've tried adding these into my httpd.conf and still no change:
<FilesMatch "\.(?i:pdf)$">
ForceType application/pdf
Header set Content-Disposition attachment
</FilesMatch>
<LocationMatch "\.(?i:pdf)$">
ForceType application/pdf
Header set Content-Disposition inline
</LocationMatch>
following these answers: Problem with opening pdf file in site
https://stackoverflow.com/a/31939133/9062782
Is there a way to make sure the new tab pdf always opens with application/pdf?
Internet Explorer is displaying contents of some files instead of downloading them. I was able to fix this by adding
<FilesMatch "\.(asapt|ob2|cub)$">
ForceType application/octet-stream
Header set Content-Disposition attachment
</FilesMatch>
to .htaccess. It works for .asapt and .cub files, but strangely not for .ob2 (they are still being displayed in-browser). Why?
In Apache, how can I set a Response Header only if it is not already set by the CGI application?
I need a way to automatically add the Cache-Control header to static content on my website, but I want the CGI application to be able to specify its own Cache-Control header too.
SetEnvIf will not work for this purpose because it only matches Request Headers.
Is there some way to conditionally / optionally set a header if it is not already set?
1) Configure Apache to append the value of empty string ("") to the Cache-Control header to ensure the header is always included in the response.
2) Configure Apache to set the Cache-Control header only if it's still set to empty string.
<FilesMatch "\.(css|ico|flv|gif|jpeg|jpg|js|pdf|png|swf)$">
Header append Cache-Control ""
Header edit Cache-Control "^[, ]*$" "max-age=1800, public"
</FilesMatch>
I have uploaded a pdf file in ftp server. The following link opens pdf file in the browser.
http://aptform.culinarysuperstars.com/Appointment_static.pdf
How to create a link for pdf file so that it is downloaded directly instead of opening in the browser?
Locate the .htaccess-file on your FTP server. This is usually hidden, so you might have to make sure you can view and edit hidden files. You can then modify it to force downloads instead of showing up in the browser.
Include the following in the file:
AddType application/octet-stream .pdf
I am unsure whether this will work in any browser; if not, try the following in the .htaccess-file:
<FilesMatch "\.(?i:pdf)$">
ForceType application/octet-stream
Header set Content-Disposition attachment
</FilesMatch>
Method 2:
<FilesMatch "\.(pdf)$" >
ForceType application/octet-stream
Header add Content-Disposition "attachment"
</FilesMatch>
This is something you can't really control, it's based on browser/user settings.
If you're able to, you can try sending the header Content-disposition: attachment; filename="Appointment_static.pdf" with the file contents, which might trigger a download dialog rather than the file being shown in the browser, but you can't really rely on that.
I have a directory of mp3 files want to have be able to serve them inline or giving the user an option to download based on the request URI.
/media/file1.mp3 -- in this case, I just want to serve the file and let the browser play it.
/media/download/file1.mp3 -- in this case, I want to make it easy for a user to download the file instead.
I have been able to accomplish this with mod_rewrite and php (using the header() and readfile() function) but I would rather do it all with mod_rewrite, mod_header etc if possible.
IfDefine will check variables set on start-up of Apache so that won't work. A valid config would be:
SetEnvIf Request_URI ^/media/download/ force-download
Header set Content-Disposition attachment env=force-download
Also changing the Content-Type is not necessary to force a download.
With mod_rewrite you can only change some specific header fields but to which the Content-Disposition header field doesn’t belong. You could only change the Content-Type header field:
RewriteRule ^media/[^/]+\.mp3$ - [L,T=audio/mpeg]
RewriteRule ^media/download/[^/]+$ - [L,T=application/octet-stream]
And if you want to use a mod_headers+mod_setenvif solution:
SetEnvIf Request_URI ^/media/download/ force-download
<IfDefine force-download>
Header set Content-Disposition attachment
Header set Content-Type application/octet-stream
</IfDefine>
If you want to base rule on parameters in URI, here is the logic / syntaxe (adapt RewriteCond) :
RewriteCond %{QUERY_STRING} ^dl=1$
RewriteRule ^ - [L,E=FORCEDOWNLOAD:1]
Header set Content-Disposition attachment env=FORCEDOWNLOAD
Here, we force download if the only parameter is "dl=1"