huhu,
ich habe ein merkwürdiges Problem und kann mir keinen richtigen Reim darauf machen.
Ich habe ein Wordpress Plugin was meine downloads schützt. Das eigentliche Upload-Verzeichnis von Wordpress ist über .htaccess geschützt und die Downloads werden über index.php?getfile=xxx geladen (im PHP Script dann mit readfile/fopen vom Dateisystem gelesen und ausgegeben).
Soweit funktioniert das ganze. Jetzt wollte ich das mithilfe von mod_rewrite umbauen, dass man "schöne" URLs hat. Dazu habe ich folgende Regel definiert:
Code:
RewriteRule files/([0-9]+)/ /~dennis/wordpress-ird-de/index.php?getfile=$1 [L]
Statt mit index.php?getfile=xxx kann ich jetzt über /files/xxx/NAME_DES_DOWNLOADS auf die Dateien zugreifen,
SEO freundlich und auch schöner für den User.
Leider geht es nicht - das PHP Script erzeugt einen 404. Erst hatte ich meine rewrite_rule im Verdacht, aber die scheint zu funktionieren. Ich habe mir das PHP Script also angeschaut, es sendet folgende Header (Bsp: PDF-Datei):
Code:
header('Content-Type: application/pdf');
header('content-length: 1234567);
header('content-disposition: attachment; filename=xyz.pdf');
... und diese Header sind für den 404 verantwortlich. Wenn ich das Senden der Header auskommentiere, bekomme ich im Browser den Inhalt des PDF angezeigt (also in binärer Form, es öffnet sich KEIN Adobe Reader und auch kein download-Fenster).
Ich kann nur vermuten, dass es daran liegt das der Client (Browser) durch die URL schon weiß das es ein PDF ist und deshalb auf die Header falsch reagiert? Welche Header muss ich senden damit es funktioniert? Habe schon die üblichen ('application\ocstream') ausprobiert - kein Erfolg.
Jemand eine Idee?
Edit: Also am Browser liegt es nicht ... kann man ja sehr einfach testen indem man mal
/wordpress-ird-de/files/204/xyz
aufruft ... dann sollte das Script auch funktionieren, tut es aber nicht.
Interessant finde ich noch, dass der Apache im Logfile den 404 gibt. Als würde er die Datei nicht finden .... aber NUR wenn man die Header vom PHP Script senden lässt. Ich verstehs einfach nicht 0o