IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Apache Discussion :

[URL Rewriting] sur téléchargement de fichiers


Sujet :

Apache

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 55
    Points : 29
    Points
    29
    Par défaut [URL Rewriting] sur téléchargement de fichiers
    Bonjour,

    Je cherche à réécrire dynamiquement une URL simple qui pointe vers des fichiers à télécharger :

    du type : "http://stite.fr/dnl/fichier.zip" ou "http://stite.fr/dnl/img/image.jpg"...

    en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://site.fr/stat/phpmyvisites.php?url=http://site.fr/dnl/img/image.jpg&id=1&pagename=FILE:image.jpg
    - ce qui est en gras est variable

    - la racine du répertoire de téléchargement est toujours /dnl/. Mais ce répertoire contient des sous répertoires

    - les fichiers sont de tous types.

    J'ai pensé à ce genre de script PHP lié par un HTACESS via un "Errordocument" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    $recupurl=$_SERVER['REQUEST_URI']; // je récupère l'adresse demandée
    header("HTTP/1.1 200 OK" ); // j'annule le 404
     
    //je redirige
    header("location:http://site.fr/stat/phpmyvisites.php?url=http://site.fr$recupurl&id=1&pagename=FILE:$recupurl");
    exit;
    ?>
    L'idéal pour moi, serait directement via un .HTACCESS. Mais je ne connais pas du tout la syntaxe à utilisé pour ce dernier et les exemples montrent plutôt la réécriture d'une url php en html. Or je cherche juste à inclure une url dans une autre.

    Vous avez des idées ? Merci

  2. #2
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Hello,

    Y a un truc qui n'est pas clair pour moi. Dis-moi si je me trompe : le visiteur tombe sur une page qui contient par exemple le lien http://stite.fr/dnl/img/image.jpg. La personne clique dessus et son navigateur est redirigé vers http://site.fr/stat/phpmyvisites.php...FILE:image.jpg (i.e. cette adresse apparaît dans la barre d'adresse de son navigateur). C'est bien ça ?

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 55
    Points : 29
    Points
    29
    Par défaut
    Mac à la rescousse, un peu de scotch et de chewing-gum et hop un code tout propre Bref...

    Dis-moi si je me trompe : le visiteur tombe sur une page qui contient par exemple le lien http://stite.fr/dnl/img/image.jpg. La personne clique dessus et son navigateur est redirigé vers http://site.fr/stat/phpmyvisites.php...FILE:image.jpg (i.e. cette adresse apparaît dans la barre d'adresse de son navigateur). C'est bien ça ?
    Oui c'est bien ça, c'est une redirection vers un script qui enregistre dans une BDD des statistiques sur les fichiers téléchargés (ou accédés via un navigateur comme par exemple des images).

    En fait, tout les fichiers et sous répertoires se trouvant dans /dnl/ sont concernés. Le fait que l'URL complète apparaisse dans le navigateur n'est pas handicapant mais à l'avenir si elle pouvait resté comme l'utilisateur la voit (site.fr/dnl/fichier.zip), pourquoi pas.

  4. #4
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Question de principe : tu es sûr que l'URL http://site.fr/stat/phpmyvisites.php...FILE:image.jpg, si tu la tapes dans un navigateur, permet de télécharger le fichier ? Ce que je veux dire c'est qu'on peut toujours faire une redirection vers cette URL, mais si elle ne permet pas de télécharger le fichier, ça ne sert à rien !

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 55
    Points : 29
    Points
    29
    Par défaut
    Ok, ok I see what you mean.... Oui, testé et approuvé.

    Voila ce fichier : http://wellby.dyndns.org/dnl/openssh...1-1.mipsel.rpm l'utilisateur (ou un programme) accède a ce fichier et initie le téléchargement. Normal.

    Avec l'URL réécrite : http://wellby.dyndns.org/stat/phpmyv...1-1.mipsel.rpm

    Tu peux constater que le résultat est le même (le fichier se télécharge), c'est transparent pour l'utilisateur. Sauf qu'avec la seconde URL j'enregistre quel fichier à été accédé.

  6. #6
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    OK, parfait. Dans ce cas, c'est assez simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    RewriteEngine on
    RewriteCond %{REQUEST_URI} /([^/]*)$
    RewriteRule /dnl/.* /stat/phpmyvisites.php?url=http://site.fr%{REQUEST_URI}&id=1&pagename=FILE:%1 [L]
    Le RewriteCond est là pour récupérer le nom du fichier sans les /

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 55
    Points : 29
    Points
    29
    Par défaut
    OK ! Merci l'ami ! Je test ça. Ça ressemble beaucoup à du PHP en fait

    J'avais essayé ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    RewriteEngine on
    RewriteCond %{REQUEST_URI} !dnl/$
    RewriteRule !\.*$ <a href="http://site.fr/stat/phpmyvisites.php?url=" target="_blank">http://site.fr/stat/phpmyvisites.php?url=</a> ??? [L]
    et a partir de là je ne savait pas comment entrer l'URL récupérée en variable

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 55
    Points : 29
    Points
    29
    Par défaut
    Oups ! Ca ne passe pas. Je ne sais pas pour quelle raison mais j'ai une erreur 500 (Internal server error). Je n'ai pas d'autre .htaccess dans les dossiers enfants de DNL.

  9. #9
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Qu'est-ce qui ne passe pas ? Tu as essayé ma règle ? Tu peux rajouter un RewriteCond %{REQUEST_URI} /dnl/ pour t'assurer davantage que c'est uniquement les URL en /dnl qui seront traitées mais ça me semble inutile car le RewriteRule présente déjà ce masque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    RewriteEngine on
    RewriteCond %{REQUEST_URI} /dnl/
    RewriteCond %{REQUEST_URI} /([^/]*)$
    RewriteRule ^/dnl/.* /stat/phpmyvisites.php?url=http://site.fr%{REQUEST_URI}&id=1&pagename=FILE:%1 [L]
    Pour le RewriteRule, tu peux essayer également sans / devant dnl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^dnl/.* /stat/phpmyvisites.php?url=http://site.fr%{REQUEST_URI}&id=1&pagename=FILE:%1 [L]

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 55
    Points : 29
    Points
    29
    Par défaut
    Voila le log apache :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Thu Apr 03 12:00:51 2008] [alert] [client xxx.xxx.xxx.xxx] /var/www/dnl/.htaccess: RewriteRule: bad argument line '/dnl/.*'  , referer: http://www.developpez.net/forums/showthread.php?t=518531
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Pour le RewriteRule, tu peux essayer également sans / devant dnl :
    J'essaye aussi, mais il me semble avoir déjà essayé. Y aurait il un log ou un utilitaire qui permettrait de suivre pas à pas la réécriture ?

    EDIT : Je viens de tester, plus d'erreur 500 en enlevant le "/" devant DNL. En revanche le rewrite n'a pas l'aire de se faire puisque même si le téléchargement fonctionne, il n'est pas enregistré dans la base. Avec les liens postés plus haut, les 2 devraient être comptabilisé. Seul le second est bien enregistré. Le premier quand à lui, agit comme une URL non réécrite.

  11. #11
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Tu peux nous copier le contenu exact de ton .htaccess ?

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 55
    Points : 29
    Points
    29
    Par défaut
    J'ai 2 .HTACCESS :

    /var/www/
    /var/www/dnl
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Options -Indexes +FollowSymlinks
    RewriteEngine on
    #RewriteCond %{REQUEST_URI} /dnl/
    RewriteCond %{REQUEST_URI} /([^/]*)$
    RewriteRule ^dnl/.* stat/phpmyvisites.php?url=http://wellby.dyndns.org%{REQUEST_URI}&id=1&pagename=FILE:%1 [L]
    Tu remarquera que j'ai également retiré le "/" devant "stat/"

    Si ça peut t'aider voici les directives de mon httpd.conf :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    <Directory "/usr/share/apache2/icons">
        Options Indexes MultiViews
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>
     
    (...)
     
     <Directory "/usr/share/apache2/error">
            AllowOverride None
            Options IncludesNoExec
            AddOutputFilter Includes html
            AddHandler type-map var
            Order allow,deny
            Allow from all
            LanguagePriority en es de fr
            ForceLanguagePriority Prefer Fallback
        </Directory>
     
    (...)
     
    DocumentRoot /var/www/
    AccessFileName .htaccess
     
    <Directory /var/www/*>
    #   Options -Indexes FollowSymLinks MultiViews
       AllowOverride All
    </Directory>
     
    #<Directory /var/www/dnl>
    # AllowOverride All
    # Options Indexes SymLinksIfOwnerMatch IncludesNoExec
    #IndexOptions FancyIndexing ScanHTMLTitles IconsAreLinks FoldersFirst
    #</Directory>
     
    Alias /webmail "/usr/share/squirrelmail"
       <Directory "/usr/share/squirrelmail">
         Options Indexes FollowSymLinks MultiViews
           AddType application/x-httpd-php .php
             AllowOverride All
              Order allow,deny
        Allow from all
    </Directory>
     
     
    <Files ~ "^\.ht">
        Order allow,deny
        Deny from all
    </Files>

  13. #13
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Pourquoi donc avoir retiré le / devant stat ? C'est surprenant que ça ne marche pas. Tu peux essayer par une redirection client voir ce que ça donne, on ne sait jamais. Pour cela, rajoute un R dans les [L] du RewriteRule ([R,L]).

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 55
    Points : 29
    Points
    29
    Par défaut
    Alors j'ai essayé ce que tu m'as dit. Je n'ai plus d'erreur 500 c'est pafait. Mais par contre l'URL n'est toujours pas réécrite je ne compred vraiment pas.

    Voila mon .HTACCESS tel qu'il est placé dans www/dnl/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Options -Indexes +FollowSymlinks
    RewriteEngine on
    RewriteCond %{REQUEST_URI} /dnl/
    RewriteCond %{REQUEST_URI} /([^/]*)$
    RewriteRule ^dnl/.* /stat/phpmyvisites.php?url=http://wellby.dyndns.org%{REQUEST_URI}&id=1&pagename=FILE:%1 [R,L]
    Dans le moteur de stat que j'utilise rie n'est enregistré. En revanche, quand je rentre l'URL réécrite c'est bien enregistré. Donc je ne pense pas que ce soit un problème du moteur de stat. Une question :

    Lorsque la réécriture est effective : l'utilisateur vois quoi comme url, celle qui est réécrite ou celle avant la réécriture ?

    Merci de ton aide précieuse !

  15. #15
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Y a un pb avec la réécriture : logiquement, à cause du R, ton navigateur devrait être redirigé vers l'URL réécrite (l'URL dans la barre d'adresse devrait être ...phpmyvisites.php?...) et visiblement, ce n'est pas le cas. Et évidemment, j'ai testé sur mon EasyPHP et :
    Chez moi, ça marche !!!
    avec le R et sans le R (quand je dis que j'ai testé, phpmyvisites.php est un simple phpinfo()).
    Tu utilises quelle version d'Apache ? C'est une 2 mais une 2 combien ?

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 55
    Points : 29
    Points
    29
    Par défaut
    Apache 2.2.3

    Je n'ai pas de configuration particulière mis à part ce problème de réécriture. La règle que tu m'as concoctée ne pose pas de problème mais n'est pas prise en compte.

    Je ne comprends pas trop là...

    Voilà ce que j'ai dans le access.log lorsque j'accède à un fichier depuis un lien direct avec le rewrite d'activer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xxx.xxx.xxx.xxx - - [07/Apr/2008:18:53:30 +0200] "GET /dnl/mldonkey-server_2.8.3-2_i386.deb HTTP/1.1" 200 551759872 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)"
    Sinon, est-ce que cette règle peu être mise dans le httpd.conf ?

  17. #17
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Oui, tu peux mettre la règle dans le httpd.conf, mais ça ne devrait rien changer.

    C'est vraiment trop bizarre : j'ai reessayé avec Wamp 2 (Apache 2.2.6) et ça marche nickel avec ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    RewriteEngine on
     
    RewriteCond %{REQUEST_URI} /dnl/
    RewriteCond %{REQUEST_URI} /([^/]*)$
    RewriteRule ^dnl/.* /stat/phpmyvisites.php?url=http://wellby.dyndns.org%{REQUEST_URI}&id=1&pagename=FILE:%1 [L]
    Je vois bien mon phpinfo avec _SERVER["QUERY_STRING"] qui vaut url=http://wellby.dyndns.org/dnl/mldonkey-server_2.8.3-2_i386.deb&id=1&pagename=FILE:mldonkey-server_2.8.3-2_i386.deb. La seule différence avec toi a priori c'est que mon .htaccess et à la racine de mon site et pas dans dnl. Essaie comme ça : mets les règles de réécriture dans un .htaccess à la racine du site, ça devrait aller mieux

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  18. #18
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 55
    Points : 29
    Points
    29
    Par défaut
    Je dois avoir un problème de config avec le serveur... Pourtant, mis à part ce petit soucis tout fonctionne à merveille...

    - Ici tu peux voir les modules chargés.

    - c'est le php info du serveur, comme tu le remarqueras l'URL n'est pas réécrite malgré le .HTACCESS à la racine du site.

    Comprend pas

    EDIT : je vais essayé de désactiver les directives du httpd.conf...

    EDIT 2 : même chose en retirant les directives... Le pire c'est que même directement dans le httpd.cof ça ne passe pas...

    Désires-tu un accès à apache pour voir ce qu'il se passe ? (Webmin ou SSH ?)

    dans _SERVER["QUERY_STRING"] j'ai : "no value"

  19. #19
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Citation Envoyé par Dr.Wily Voir le message
    dans _SERVER["QUERY_STRING"] j'ai : "no value"
    Je ne comprends pas : tu as changer la réécriture pour rediriger vers phpinf.php, c'est ça, et tu ne vois pas la query string ?

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  20. #20
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 55
    Points : 29
    Points
    29
    Par défaut
    Je ne comprends pas : tu as changer la réécriture pour rediriger vers phpinf.php, c'est ça, et tu ne vois pas la query string ?
    Ah non pas du tout. J'ai juste placé le phpinfo dans /dnl/. Normalement quelque soit le fichier il devrait être redirigé non ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/08/2011, 17h40
  2. Appliquer 2 règles d'url-rewriting sur 1 url
    Par Mikgger dans le forum Apache
    Réponses: 1
    Dernier message: 23/08/2009, 16h28
  3. [phpBB] Url rewriting sur forum phpBB3
    Par Immobilis dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 04/03/2009, 12h32
  4. [URL REWRITING] Incohérence avec le fichier index ?
    Par dorian53 dans le forum Apache
    Réponses: 15
    Dernier message: 28/01/2009, 18h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo