URL zonder extensie, direct download PDF

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • Jazco2nd
  • Registratie: Augustus 2002
  • Laatst online: 10-09 23:10
Mijn vraag
Vroeger gebruikte ik Fastmail.fm, een betaalde email en file management provider. Het mooiste aan hun file management systeem was dat je bestanden simpelweg met de filename beschikbaar waren, bijvoorbeeld een pdf met naam menukaart.pdf:
https://jazco2nd.fastmail.fm/menukaart
Als je naar die link toe ging, werd direct de pdf gedownload.

Ik probeer nu precies hetzelfde te bereiken.

Relevante software en hardware die ik gebruik:
ik heb Neostrada als webhost, gebruik Wordpress, geinstalleerd via cPanel en cPanel heeft ook een File Manager, Web Disk etc. Maar al upload ik bestanden naar /public_html, ik zal altijd de extensie in de url moeten zetten.

Wat ik al gevonden of geprobeerd heb:
Ik heb me suf gezocht online hoe ik dit kan bereiken, desnoods door een aparte subdir met daarin een stukje code, bijvoorbeeld mijnsite.com/files/ zodat alle bestanden in daarin beschikbaar zijn via de url in bovenstaand voorbeeld.
Maar het enige wat ik telkens vind is hoe je een url in HTML schrijft (a href...).


...

Alle reacties


Acties:
  • 0 Henk 'm!

  • Kvn
  • Registratie: Maart 2001
  • Laatst online: 10-09 15:07

Kvn

Je zou een .htaccess bestandje in je root kunnen aanmaken met daarin een rule voor al je files
code:
1
RewriteRule ^menukaart$ /menukaart.pdf? [L,R=301]

Acties:
  • +1 Henk 'm!

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
Kvn schreef op maandag 25 februari 2019 @ 18:07:
Je zou een .htaccess bestandje in je root kunnen aanmaken met daarin een rule voor al je files
code:
1
RewriteRule ^menukaart$ /menukaart.pdf? [L,R=301]
Dat doet wel een 301 externe redirect. Wil je wss. niet.

Als je het intern wilt houden, zul je met iets anders aan de gang moeten. Je zult naast de juiste Content-Type ook de juiste Content-Disposition header moeten zetten. En in die laatste zul je ook een voorgestelde file naam moeten hebben om e.e.a. vanuit de bezoeker weer recht te breien, zodat zij netjes een file met extensie krijgen om te downloaden.

Gegeven een url https://example.com/foobar zullen je HTTP headers dus uiteindelijk moeten bevatten:
code:
1
2
Content-Type: application/pdf
Content-Disposition: attachment; filename="foobar.pdf"

Aangezien het filename gedeelte van die disposition header dynamisch is, zul je wat moeten gaan goochelen met capture groups en environment variables. Misschien iets wat lijkt op:
code:
1
2
3
4
RewriteRule "^pdfs/(.*)$" "files/%1.pdf" [E=pdf_attachment:%1.pdf]
Header set Content-Type "application/pdf" [env=pdf_attachment]
Header set Content-Disposition "attachment; filename=\"%{pdf_attachment}e\"" [env=pdf_attachment]
UnsetEnv pdf_attachment

(Lang geleden dat ik naar dit soort dingen gekeken heb, dus pin me er niet op vast dat dat 100% correct is. Het is maar om je een idee te geven.)

[ Voor 12% gewijzigd door R4gnax op 25-02-2019 19:47 ]


Acties:
  • 0 Henk 'm!

  • Jazco2nd
  • Registratie: Augustus 2002
  • Laatst online: 10-09 23:10
R4gnax schreef op maandag 25 februari 2019 @ 19:42:
[...]


Dat doet wel een 301 externe redirect. Wil je wss. niet.

Als je het intern wilt houden, zul je met iets anders aan de gang moeten. Je zult naast de juiste Content-Type ook de juiste Content-Disposition header moeten zetten. En in die laatste zul je ook een voorgestelde file naam moeten hebben om e.e.a. vanuit de bezoeker weer recht te breien, zodat zij netjes een file met extensie krijgen om te downloaden.

Gegeven een url https://example.com/foobar zullen je HTTP headers dus uiteindelijk moeten bevatten:
code:
1
2
Content-Type: application/pdf
Content-Disposition: attachment; filename="foobar.pdf"

Aangezien het filename gedeelte van die disposition header dynamisch is, zul je wat moeten gaan goochelen met capture groups en environment variables. Misschien iets wat lijkt op:
code:
1
2
3
4
RewriteRule "^pdfs/(.*)$" "files/%1.pdf" [E=pdf_attachment:%1.pdf]
Header set Content-Type "application/pdf" [env=pdf_attachment]
Header set Content-Disposition "attachment; filename=\"%{pdf_attachment}e\"" [env=pdf_attachment]
UnsetEnv pdf_attachment

(Lang geleden dat ik naar dit soort dingen gekeken heb, dus pin me er niet op vast dat dat 100% correct is. Het is maar om je een idee te geven.)
Ik begrijp dat een 301 niet gewenst is, maar het werkt wel.

De oplossing die je voorstelt geeft me een 500 error, de website is daardoor niet meer toegankelijk.
Ik heb nog nooit iets met .htaccess gedaan dus dit is helaas abracadabra voor mij. Het geeft wel een richting om verder te googlen. Tot ik iets beters vind houd ik voor nu ff de 301 oplossing.

Acties:
  • +1 Henk 'm!

  • Room42
  • Registratie: September 2001
  • Niet online
@Jazco2nd Met een HTTP error 500 moet je in de logging van de webserver kijken wat de fout precies was. Deze geeft zeer waarschijnlijk een Google-zoekopdracht die je direct naar de oplossing wijst. Aan jou dan om die te begrijpen :+

"Technological advancements don't feel fun anymore because of the motivations behind so many of them." Bron


Acties:
  • 0 Henk 'm!

  • Jazco2nd
  • Registratie: Augustus 2002
  • Laatst online: 10-09 23:10
Room42 schreef op maandag 25 februari 2019 @ 21:25:
@Jazco2nd Met een HTTP error 500 moet je in de logging van de webserver kijken wat de fout precies was. Deze geeft zeer waarschijnlijk een Google-zoekopdracht die je direct naar de oplossing wijst. Aan jou dan om die te begrijpen :+
Thanks ga ik ff doen.

Acties:
  • 0 Henk 'm!

  • Room42
  • Registratie: September 2001
  • Niet online
Je mag uiteraard de foutmelding ook hier plakken, als je er met Google niet uitkomt.

"Technological advancements don't feel fun anymore because of the motivations behind so many of them." Bron


Acties:
  • +1 Henk 'm!

  • nescafe
  • Registratie: Januari 2001
  • Laatst online: 14:55
Hiervoor kun je de .htaccess option MultiViews gebruiken.
The effect of MultiViews is as follows: if the server receives a request for /some/dir/foo, if /some/dir has MultiViews enabled, and /some/dir/foo does not exist, then the server reads the directory looking for files named foo.*, and effectively fakes up a type map which names all those files, assigning them the same media types and content-encodings it would have if the client had asked for one of them by name. It then chooses the best match to the client's requirements.
Bij het downloaden wordt de oorspronkelijke filename (hier) meegegeven als content-location header.

* Barca zweert ook bij fixedsys... althans bij mIRC de rest is comic sans


  • AW_Bos
  • Registratie: April 2002
  • Laatst online: 12:33

AW_Bos

Liefhebber van nostalgie... 🕰️

nescafe schreef op maandag 25 februari 2019 @ 21:39:
Hiervoor kun je de .htaccess option MultiViews gebruiken.


[...]


Bij het downloaden wordt de oorspronkelijke filename (hier) meegegeven als content-location header.
Ikzelf prefereer liever mod_rewrite in Apache. Met Multiviews zijn redirects weer lastig, zoals bijv. Http -> https. Bij mij werd het pad aangepast met een .php extentie erbij.

Telecommunicatie van vroeger
🚅Alles over spoor en treintjes

Pagina: 1