mod_rewrite a download souborů
14 příspěvků
Archiv diskusního fóra
Fórum je uzavřené a slouží pouze ke čtení. Některé informace mohou být zastaralé.
-
Tak jsem tu opět po delší době s žádostí o pomoc :) Nástin situace: Používám na webu (nejde o manual.wz.cz) přepis adres pomocí .htaccess kdy přepisuji adresu ve tvaru /index.php?page=stranka do formátu /stranka. Tohle funguje tak, jak má. Problém nastává, pokud chci umožnit přímé stažení nějakého souboru (například /downloads/file.zip). Pokud totiž zadám adresu http://example.com/downloads/file.zip, tak se mi přepíše na http://example.com/index.php?page=/downloads/file.zip - což samozřejmě vygeneruje chybovou stránku 404 Not Found. Takže: navrhněte, prosím, nějaké schůdné řešení, které by umožňovalo přímý download souborů bez využití PHP downloaderu. Předem díky za případné tipy. PS: nejde sice přímo o PHP, ale tahle sekce se mi zdála nejpříhodnější.
-
<HTML>Dej sem to pravidlo kterym to prepisujes a ja ti to prepisu tak aby slo.</HTML>
-
Dobře, ale upozorňuju, že je tvdá amatéřina a není na to zrovna nejhezčí pohled: RewriteEngine On RewriteRule ^(.+)/$ /$1/ [L,QSA,R=301] RewriteRule ^([A-Za-z0-9-]+)$ index.php?page=$1 [QSA] PS: pokud se zadá adresa ve tvaru http://example.com/anything , tak to jde, ale pokud se zadá s lomítkem na konci (tedy http://example.com/anything/), tak se to zacyklí :) PPS: pokud to zvládneš, máš u mě Tatranku - případně nějaký její ekvivalent =)
-
<HTML>Tak to je jednoduchy... 1) prvni pravidlo se jasne zacykli, pryc s nim 2) druhy pravidlo zas neresi lomitka ani tecky, takze je na nic. Zkus: RewriteEngine on RewriteRule !\.(js|ico|gif|jpg|png|css|htm|zip)$ index.php http://www.domena.cz/nazdar echo $_SERVER['REQUEST_URI']; vypise: "/nazdar" http://www.domena.cz/nazdar/ echo $_SERVER['REQUEST_URI']; vypise: "/nazdar/" http://www.domena.cz/nazdar/tohle/je/tuna/url/k/nicemu echo $_SERVER['REQUEST_URI']; vypise: "/nazdar/tohle/je/tuna/url/k/nicemu" http://www.domena.cz/nazdar/tohle/je/?foo=barbarbar echo $_SERVER['REQUEST_URI']; vypise: "/nazdar/tohle/je/?foo=barbarbar" http://www.domena.cz/cokolikv/kdekoliv/jakkoliv/soubor.zip neprojde prepisem a jde primo na cilovou adresu to ukonci trapeni s lomitkama, php dostane vzdy url pokud tam neni specifikovana pripona ktera se nema prepisovat</HTML>
-
ten první řádek nechápu. nemělo to bejt: RewriteRule ^(.+)/$ /$1 [L,QSA,R=301] (tedy bez toho lomítka na konci) ? aby se to necyklilo? a jinak - přidat něco jako RewriteCond %{REQUEST_URI} [^download] před ten druhý řádek?
-
A neni jedodussi tohle: #RewriteCond %{REQUEST_FILENAME} -f [NC] #RewriteRule ^(.+[^/])$ /$1/ [R=301,L] ? Pokud soubor existuje tak to tak necha, ale pokud ne,tak to necha zpracovat ... ;) (teda jestli jsem spravne pochopil 'zadani' xD )
-
Takže díky za všechny návrhy. Nakonec vyhrál Freezeho návrh, takže gratuluju, máš u mě Tatranku :) Ad Richard: zajímavý nápad. Já jsem bohužel spíš potřeboval něco, co by reagovalo na jakýkoliv typ souboru bez toho, aniž bych musel přidávat další přípony. Ad R.U.R: nevím, asi jsem dělal něco špatně, ale když jsem zkoušel 20x za sebou otevřít soubor z adresáře /download/, tak se mi to tak ve čtyřech případech z pěti zacyklilo a v jednom to šlo ... nechápu ?!
-
<HTML>Osobně spíš preferuju definovaní veřejných typů a zbytek je privátní (řízený scriptem), než dát vše jako veřejné (xml, phtml, tmp, tpl, ...) Nakonec i soubory ke stažení by měl ovládat script z hlediska bezpečnosti (privátní zóny) ale také z hlediska přidružené funkčnosti (záznam počtu stažení, komprese dat před odesláním, ...)</HTML>
-
Richard: jako ano, ale je stim moc práce ;-)) a navíc když já jsem to zkoušel, tak se mi nedařilo vracet soubor se správným názvem, správnou příponou a správným content-typem. Asi je pak potřeba nastavit php parsování do všech typů souborů...?
-
=Richard= Mas pravdu, neni to nejlepsi - sam to nepouzivam ... rekneme, ze vyrazne bezpecnejsi to muze byt treba jenom 'posunutim' do jednoho adresare tak, ze takto pujdou stahnout jenom soubory napr z adresare download ... Ale IMHO z hlediska downloadu (napr. mp3,videa,obrazku,a vseho co muze prohlizec otevrit) je lepsi posilat headery ... header("Content-Description: File Transfer"); header("Content-Type: application/force-download"); takze pokud se odnekud stahuji treba videa tak je urcite lepsi neudavat celou jejich cestu, ale jenom napr. download.php?file=soubor.avi :)
-
Freeze: "hlediska downloadu (napr. mp3,videa,obrazku,a vseho co muze prohlizec otevrit) je lepsi posilat headery" A až budeš mít web s vekou návštěvností, odkud se budou stahovat tisíce souborů denně, tak se budeš strašně divit, že ti server nějak nestíhá. Ono přeci jenom je rozdíl v tom, jestli ty soubory čte Apache přímo z disku, nebo jestli je musí Apache dát PHP, to je načíst a předat zpět k Apache aby jej odeslal ke klientovi...
-
mě taky vadilo, že download.php?video.avi když uložim, tak to mělo příponu php a název download.
-
Sry .. zapomel jsem na nektere headrey : $soubor='mojevideo.avi'; header("Content-Disposition: attachment; filename=\"$soubor\""); .... takhle to hodi prohlizeci nazev stahovaneho souboru ;)
-
thx, to přesně jsem neuměl :-)