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 :

Réécriture avec 2 .htaccess dans des sous-répertoires


Sujet :

Apache

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 94
    Points : 47
    Points
    47
    Par défaut Réécriture avec 2 .htaccess dans des sous-répertoires
    Bonjour,
    Depuis des jours, je fait un blocage sur des réécritures d'url qui sont probablement très simples. J'ai besoin du petit coup de pouce pour faire surface.
    L'exemple le plus stupide qui me fait trébucher et le suivant : transformer
    http://monsite.com/equipement.php
    en
    http://monsite.com/repertoire1/index.php/equipements par htaccess.
    Dans le répertoire root du site, j'ai le code suivant qui ajoute /repertoire1 à l'adresse d'entrée et qui fonctionne correctement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    RewriteEngine on
    #RewriteCond %{REQUEST_URI} !^/repertoire1
    #RewriteRule ^(.*)$ /repertoire1/$1
    Dans le répetoire 1, j'ai l'htaccess suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    RewriteEngine on
    RewriteRule    ^(.*)/(equipement\.php)$  $1/equipements
     
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?/$1 [L]
    La première règle transforme /equipement.php en /equipements et fonctionne correctement si je la teste sur http://htaccess.madewithlove.be/ (il n'est pas possible de tester la totalité car ce site n'accepte pas les %{REQUEST_FILENAME}) et la seconde ajoute le /index.php. Ce découpage se justifie par l'utilisation du framework codeigniter sans l'affichage du fameux index.php.
    Donc, les différents modules fonctionnent, la page fonctionne si j'introduit l'adresse manuellement, mais la redirection ne fonctionne pas. Un coup de main m'aiderait à conserver quelques cheveux que je m'arrache la dessus depuis pas mal de temps. 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
    A mon avis, voici ce qui se passe. Si tu demandes http://monsite.com/equipements.php le premier .htaccess redirige sur http://.../repertoire1/equipements.php. Et là, le second .htaccess doit traiter la chaîne de caractères suivante : "équipements.php" sans / devant. Et donc on passe directement sur la seconde règle de ce second .htaccess qui aboutit à l'URL absolue http://.../repertoire1/index.php?/equipements.php. Pour le traitement de cette nouvelle URL par le second .htaccess, je ne sais pas trop ce qui se passe. Je dirais que le traitement s'arrête là.

    Quand tu dis que "ca ne fonctionne pas", est-ce que ce que tu observes correspond à cette analyse ?

    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
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 94
    Points : 47
    Points
    47
    Par défaut
    Bonjour.
    Voici une partie de $_SERVER enregistré sur la page erreur 404 :

    SERVER_SOFTWARE ===> Apache/2.2.15 (Unix) mod_ssl/2.2.15 OpenSSL/0.9.8e-fips-rhel5 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635 PHP/5.2.13
    SERVER_NAME ===> monsite.com
    SERVER_ADDR ===> xxx.xxx.xx.xx
    SERVER_PORT ===> 80
    REMOTE_ADDR ===> zz.zz.zzz.zz
    DOCUMENT_ROOT ===> /home/monsite/public_html
    SERVER_ADMIN ===> webmaster@monsite.com
    SCRIPT_FILENAME ===> /home/msim/public_html/repertoire1/index.php
    REMOTE_PORT ===> 51174
    REDIRECT_QUERY_STRING ===> /equipement.php
    REDIRECT_URL ===> /ci321/equipement.php
    GATEWAY_INTERFACE ===> CGI/1.1
    SERVER_PROTOCOL ===> HTTP/1.1
    REQUEST_METHOD ===> GET
    QUERY_STRING ===>
    REQUEST_URI ===> /equipement.php
    SCRIPT_NAME ===> /repertoire1/index.php
    PHP_SELF ===> /rep_site/index.php
    REQUEST_TIME ===> 1380614236

  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
    On dirait que je ne me suis pas trompé dans mon raisonnement. Et comme je disais, il semble que la première règle du second .htaccess n'est pas exécutée à cause du / qui est nécessairement présent dans le filtre (1er paramètre) de la RewriteRule. Donc modifie la première règle comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule    ^(.*)equipement\.php$  $1equipements

    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
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 94
    Points : 47
    Points
    47
    Par défaut
    Bonjour et merci de ton aide,
    J'ai toujours le même résultat avec strictement le même $_SERVER. J'ai toutefois une solution qui fonctionne, c'est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    RewriteCond %{REQUEST_URI} ^/repertoire1/equipement\.php$
    RewriteRule ^(.*) http://monsite.com/repertoire1/index.php/equipements [L]
    #ligne 3 RewriteRule    ^(.*)equipement\.php$  $1equipements
    #ligne 4 RewriteRule ^(.*) http://monsite.com/index.php/equipements
    (j'ai laissé en commentaire la ligne 3 modifiée que j'ai essayée).
    Bon, ça fonctionne, le [L] est indispensable sans doute pour ne pas réécrire repertoire1 quelque part. La ligne 4 ne fonctionne pas mais on tombe sur une erreur d'adressage et pas une 404. Sans doute y a t'il eu un index.php ajouté quelque part ou il ne fallait pas. Donc, je vais pouvoir m'en sortir, mais ça me semble une bidouille.

    Enfin, je suis étonné de trouver l'url modifié dans la barre d'adresse du navigateur. Je pensais que seule l'adresse envoyée au serveur l'était, et pas celle affichée, sauf à ajouter un drapeau de réécriture, je ne sais plus lequel.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Redirection avec htaccess dans un sous-répertoire
    Par fmerceur dans le forum Apache
    Réponses: 2
    Dernier message: 15/03/2010, 16h04
  2. [script icons] Utilisation dans des sous-répertoires
    Par Hailey dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 5
    Dernier message: 23/07/2009, 15h43
  3. compte de fichiers contenus dans des sous répertoires
    Par Jasmine80 dans le forum Langage
    Réponses: 4
    Dernier message: 27/02/2008, 09h58
  4. Suppression de fichiers dans des sous-répertoires
    Par astrolane dans le forum Langage
    Réponses: 2
    Dernier message: 07/09/2007, 16h22
  5. Recherche de fichiers dans des sous répertoires
    Par Mimi Bulles dans le forum Langage
    Réponses: 8
    Dernier message: 25/04/2006, 17h41

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