Toon posts:

[.htaccess] redirect loop probleem

Pagina: 1
Acties:
  • 124 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Op een website heb ik vele downloads die ik wil laten tellen door een php-download counter die ik gemaakt heb. In mijn root/files/ map heb ik bijvoorbeeld een bestand 'download.zip', welke geteld en gedownload wordt door mijn counter met de url 'dl.php?file=download.zip'.

Dat werkt goed, en omdat ik wil zorgen dat alle downloads altijd geteld worden heb ik met .htaccess gezorgd dat de download urls herschreven worden naar de downloader counter urls.

Mijn .htaccess bestand is deze:
code:
1
2
3
Options +FollowSymlinks
RewriteEngine on
RewriteRule ^(.+).zip dl.php?file=$1.zip [nc]


Dat werkt wel, maar wat ik vergeten was was dat wanneer de files doorgestuurd worden naar dl.php de counter op zijn beurt het download bestand weer opvraagt, waardoor er een loop ontstaat. Download file roept dl.php aan, dl.php roept download file aan, etc.

Nu heb ik volgens mij een soort van command nodig in het .htaccess bestand dat zegt dat de redirect niet van toepassing is wanneer men ernaar verwijst vanaf dl.php

Ik heb tot nu toe nog nergens kunnen vinden hoe dat moet, dus ik hoop heel erg dat hier iemand me kan helpen.

Nog even voor de duidelijkheid: alle downloads, de download counter (1 php bestand gebruik makend van een sql database waar de downloads in staan) en het .htaccess bestand staan allemaal in dezelfde map.

Alvast bedankt.

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Makkelijkste oplossing is waarschijnlijk zoiets:
code:
1
RewriteCond ${SCRIPT_FILENAME} !^dl.php

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


  • Mastermind
  • Registratie: Februari 2000
  • Laatst online: 24-04 14:05
code:
1
2
3
4
5
6
7
Options +FollowSymlinks
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !^dl.php$
RewriteRule ^(.+).zip dl.php?file=$1.zip [nc]

Verwijderd

Topicstarter
Bedankt voor het meedenken, maar helaas werkt het nog steeds niet. :(

De tip van Spider.007 veranderde helaas niks. Ik zat nog steeds in dezelfde loop.

Die van Mastermind stopte de loop wel, maar dat was omdat al het redirecten niet meer werkte. download.zip verwees niet meer naar dl.php?file=download.zip
Dit laatste was overigens te verhelpen door de volgende regel te schrappen:
Mastermind schreef op zondag 07 augustus 2005 @ 17:22:
code:
1
RewriteCond %{REQUEST_FILENAME} !-f
Maar toen keerde ik wel weer terug naar de loop die ik al had. :(

Ik heb geprobeerd aan de tips te sleutelen met hulp van wat websites, maar nog steeds geen succes. Dus als iemand nog een idee heeft hoor ik het heel graag.

  • WhiteDog
  • Registratie: Juni 2001
  • Laatst online: 03-05 19:49

WhiteDog

met zwarte hond

Ik heb ook een redirect probleem:

code:
1
Redirect /file.exe http://www.andere.site/files/file-123.exe


Alleen doet hij dit ook op mijn subdomeinen, toevallig zijn de filenames hetzelfde (www.site.be/file.exe en dev.site.be/file.exe). Ik zou echter willen dat hij NIET redirect in de dev folder...

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

WhiteDog, op deze manier een topic kapen is eigenlijk niet de bedoeling. Je probleem is heel anders dan dat van de topicstarter, dus het is me een raadsel waarom je die vraag hier maar neerplempt...

@HorckDude: you stuur je die zipfile door naar de browser? Met een location redirect? Of met fopen/fpassthru? In het eerste geval: probeer dat laatste eens. In het tweede geval: laat dat stukje code eens zien. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
In dl.php staat het in de html head code:
code:
1
2
3
4
print "<html>
        <head>
            <meta http-equiv='refresh' content='0;URL=$siteurl$file'>
        </head>";

$siteurl bevat de volledige link naar de map waar de downloads staan
$file is de bestandsnaam die uit de url wordt gehaald (hier vet gedrukt: root/files/dl.php?file=download.zip)

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Tsja, als je die meta tag nu eens weghaalt en dit in de plaats zet:
PHP:
1
2
3
$handle = fopen($file);
fpassthru($handle);
fclose($handle);

Let wel op dat je voor fopen dus geen url gebruikt, maar een relatieve verwijzing. Op die manier zou je volgens mij Apache moeten omzeilen en gewoon via het filesysteem moeten werken, wat betekent dat je geen last zou moeten hebben van je .htaccess file. :)

Edit: ow, nog wat belangrijks: verder mag er helemaal geen uitvoer op die pagina staan. Dus buiten de <?php en ?>-tags geen spaties of enters, en in PHP zelf helemaal niets afdrukken behalve wat je met fpassthru doet. Het kan bovendien zijn dat je een application/x-zip-compressed content-type header moet zetten. :)

[ Voor 31% gewijzigd door NMe op 08-08-2005 01:36 . Reden: fpassthrough -> fpassthru ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • netiul
  • Registratie: December 2001
  • Laatst online: 02-05 14:00
fpassthrough fpassthru

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Sorry, het is laat. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Verwijderd schreef op maandag 08 augustus 2005 @ 00:43:
Bedankt voor het meedenken, maar helaas werkt het nog steeds niet. :(

De tip van Spider.007 veranderde helaas niks. Ik zat nog steeds in dezelfde loop.

[...]
Het was ook slechts een ongetest ideetje; maar ik gok dat als je het complete pad erin plaatst dat het dan wel werkt :)

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Spider.007 schreef op maandag 08 augustus 2005 @ 09:39:
Het was ook slechts een ongetest ideetje; maar ik gok dat als je het complete pad erin plaatst dat het dan wel werkt :)
Dan nog lost ie een probleem op dat er in de eerste plaats niet behoort te zijn. Hij benadert nu een bestand dat op de lokale server staat niet via het filesystem, maar via de webserver zelf. Dat heeft om te beginnen al het effect dat het bandbreedtegebruik verdubbelt in je logs (eerst server->server, dan nog eens server->client), en verder brengt het natuurlijk problemen mee zoals die in dit topic. Met mijn suggestie werk je hier als het goed is gewoon omheen. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

-NMe-:
Dan nog lost ie een probleem op dat er in de eerste plaats niet behoort te zijn. Hij benadert nu een bestand dat op de lokale server staat niet via het filesystem, maar via de webserver zelf. Dat heeft om te beginnen al het effect dat het bandbreedtegebruik verdubbelt in je logs (eerst server->server, dan nog eens server->client), en verder brengt het natuurlijk problemen mee zoals die in dit topic. Met mijn suggestie werk je hier als het goed is gewoon omheen. :)
RewriteCond is alleen maar een verscherping op de rewriterule die erna komt. Daar is dus helemaal niets mis mee.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

drm schreef op maandag 08 augustus 2005 @ 20:09:
RewriteCond is alleen maar een verscherping op de rewriterule die erna komt. Daar is dus helemaal niets mis mee.
Je hebt nog gelijk ook. :P Ik denk dat ik me maar even afzijdig ga houden van deze discussie voor ik nog meer domme dingen zeg. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

De oplossing van dit soort problemen is waarschijnlijk [L] toevoegen achter je RewriteRule, niet?

Mijn URL-prettification:

code:
1
2
3
4
5
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*) index.php?page=$1 [QSA,L]

Verwijderd

Topicstarter
-NMe- schreef op maandag 08 augustus 2005 @ 01:22:
Tsja, als je die meta tag nu eens weghaalt en dit in de plaats zet:
PHP:
1
2
3
$handle = fopen($file);
fpassthru($handle);
fclose($handle);
Lukt nu bijna.
Bovenstaande heb ik gedaan en toen leek alles perfect te werken. Alles t/m het download schermpje, maar als je wil downloaden gebeurt er niks. Het schermpje doet niks en er vindt niks van transfer plaats. De hele tijd blijft er staan "Bezig met ophalen van bestandsinformatie.".
Een paar bestanden (ook zip) downloaden wel, maar eenmaal geladen blijken het zipbestand leeg, ook al heb ik net het volledige bestand gedownload.

De volgende regel heb ik overigens ook in dl.php staan:
header("Content-type: application/x-zip-compressed");
dus zipfiles zouden het gewoon moeten doen.

Is dit op te lossen, of is er misschien een andere manier om in php een bestand aan te roepen zonder de redirect te triggeren?
Verwijderd schreef op maandag 08 augustus 2005 @ 21:39:
De oplossing van dit soort problemen is waarschijnlijk [L] toevoegen achter je RewriteRule, niet?
Dat hielp jammer genoeg ook niet. :|

Heeft iemand nog een idee hoe dit op te lossen is? Al is het via een omweg.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

En met een header("Content-Disposition: attachment; filename=".$file); (waar $file alleen de bestandsnaam, zonder map, is)? En met header("Content-Transfer-Encoding: binary"); en header("Content-Length: ".filesize($file); erbij?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
Verandert niks. :(
Het maakt zeker ook niks uit in welke volgorde die content regels staan of wel?

Verwijderd

Topicstarter
Inmiddels is het 'opgelost'. Ondanks de vele hulp die hier gegeven werd, en ik elder op internet gevonden heb wilde het maar niet lukken, dus heb ik de makkelijke weg genomen: de download locaties van mijn downloads zijn niet meer dezelfde als de echte locaties op de server. So verwijst op mijn server nu root/files/download.zip via de download counter naar root/downloads/download.zip

Eigenlijk een beetje valsspelen, maargoed, ik was het gewoon zat. :)

Toch iedereen heel erg bedankt voor het meedenken. Ik heb er in ieder geval veel van geleerd. :)

En ik denk dat hier dan nu een groot hangslot op mag.
Pagina: 1