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 :

[.htaccess] Quelques problèmes d'URL relative en URL rewriting


Sujet :

Apache

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Par défaut [.htaccess] Quelques problèmes d'URL relative en URL rewriting
    Bonsoir,

    Je suis en train de travailler sur un exercice fort intéressant mais qui, pour le moment me soulève plus d'ennuis qu'autres choses.

    J'ai fais une arborescence suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    http://
       domaine/
          monsite/
             index.php
             .htaccess
    Pour accéder en chemin relatif, je fais mes liens sous la forme http://domaine/monsite/index.php .

    Là où ça se complique ! C'est lorsque je veux placer des paramètres de page.

    J'ai commencer par faire un rewrite disant que le lien http://domaine/monsite/index.html fonctionne.

    Si je veux que http://domaine/monsite/index/2.html pointe sur http://domaine/monsite/index.php?id=2 j'arrive à une belle erreur 404 disant :
    Not Found

    The requested URL /bullecms/index/2.html was not found on this server.
    Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny9 with Suhosin-Patch Server at helium Port 80
    En gros ma page n'existe pas. Oui par ce que je n'ai pas de dossier index avec un fichier 2.php . J'en déduits que mon rewriting ne s'effectue pas correctement malgrès ce que j'ai écrit et qui suit.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    RewriteEngine on
     
    RewriteRule ^http://helium/bullecms/([0-9a-zA-Z]+)\.html$  http://helium/bullecms/index.php?id=$2 [L]
    RewriteRule ^(.+)\.html$   http://helium/bullecms/$1.php [L]
    Si quelqu'un peut m'aiguiller, ou le cas échéant m'expliquer ce qui peut ne pas aller, je pourrait surement avancer.

    Merci

  2. #2
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    Il aurait fallut poster du coté du forum Apache à mon avis.
    Parcourt le, il est très souvent question de réécriture.

    Faut voir ce que tu souhaite faire, car il y a une infinité de solutions si on peu dire.

    RewriteRule ^http://helium/bullecms/([0-9a-zA-Z]+)\.html$ http://helium/bullecms/index.php?id=$2 [L]
    RewriteRule ^(.+)\.html$ http://helium/bullecms/$1.php [L]
    Peut être est ce un oubli, mais aucunes de ces URLs ne comportent de domaine valides : domaine.com, domaine.fr, etc ..

    Est ce : http://helium.com/bullecms/...etc...
    Et si on fait : http://www.helium.com/ tout court, est ce valide ?
    Ou encore : http://www.helium.com/bullecms/ est ce valide ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    RewriteEngine on
     
    RewriteBase /bullecms/
    RewriteRule ^(.*)\.html index.php/$0 [PT]
    Ici, en supposant que bullecms soit un répertoire dans le Host.
    Dans cet exemple, seules les URLs .html seront prisent en compte, c'est pas dit que ça soit la meilleur solution, ce n'est qu'un exemple.

    Disons que selon ce que je comprends, le index.php serait le point d'entrée de toutes les pages html.
    Dans le jargon, le index.php est appelé boostrap si je ne dis pas de bêtises.


    Je ne vais que faire des hypothèses, car basées selon les URLs que tu donne.
    Le "index" serait incorrect, voir inutile, et le "2" serait plus un paramètre qu'une vrai réécriture, car il correspondrait à un ID de page.

    Pour faire court, tes URLs pourraient ce voir ainsi :
    .../domaine.com/bullecms/accueil.html -> .../domaine.com/bullecms/index.php?page=1
    .../domaine.com/bullecms/contact.html -> .../domaine.com/bullecms/index.php?page=2

    Tout l'art de la réécriture est donc de décortiquer ces URLs pour récupérer "accueil" ou "contact", ensuite retrouver l'ID de la page correspondante (1 ou 2, etc ...).


    D'ailleurs, regarde l'URL de ce forum pour ce topic, c'est à peu près le même principe, c'est le titre qui s'y trouve, et c'est presque certain qu'il correspond à un ID dans une table d'une Bdd.
    .../debuter/debutant-quelques-problemes-durl-relative-url-rewriting-htaccess/


    Faut voir maintenant si tout ça correspond à ce que tu recherche.

  3. #3
    Membre Expert
    Avatar de Mahefasoa
    Homme Profil pro
    Manager IT
    Inscrit en
    Octobre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Manager IT

    Informations forums :
    Inscription : Octobre 2003
    Messages : 835
    Par défaut
    Bonjour,

    Je suis de même avis que RunCodePhp pour mettre ce post dans la partie Apache du forum.

    Je pense qu'il y avait une mauvaise interprétation de la première règle.

    Ce sera la seconde règle qui sera utilisée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    RewriteRule ^(.+)\.html$   http://helium/bullecms/$1.php [L]
    Au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    RewriteRule ^http://helium/bullecms/([0-9a-zA-Z]+)\.html$  http://helium/bullecms/index.php?id=$2 [L]
    Car dans cette dernière règle, tu as utilisé comme variable de capture "$2" ce qui sous-entends que ce qui va se placer ici sera mis dans la seconde capture dans le pattern.
    Mais en l'occurrence, tu ne disposes que d'une seule capture dans le pattern.
    Je pense (à partir de ce raisonnement), qu'il va falloir modifier la règle comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RewriteRule ^http://helium/bullecms/([0-9a-zA-Z]+)\.html$  http://helium/bullecms/index.php?id=$1 [L]
    En espérant de t'avoir aidé.

    Bien cordialement,

  4. #4
    Membre éclairé Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Par défaut
    Pour ce qui est du mauvais placement dans le forum, au mieux on peux le déplacer dans la bonne section.

    Pour la question helium, c'est un serveur local donc je n'ai pas de www.helium.com du moins pas pour mes developpements. Mais ça peut faire parti des erreurs.

    Ce matin même j'ai essayer des choses et il y a eu des résultats étranges.
    Si je fais un lien <a href="index.php">index</a> tout fonctionne car c'est une adresse relative. Mais si j'ai le malheur, sans utiliser de fichier htaccess de mettre <a href="/index.php">index</a> qui est une adresse absolue, ça plante en une jolie page blanche. Donc la je soupçonne appache de ne pas faire correctement son travail.

    Pourquoi ? Je n'en sait pour le moment rien

  5. #5
    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
    Par défaut
    Il y a quoi dans ton .htaccess, maintenant (donne tout le contenu du fichier, s'il te plaît) ?

  6. #6
    Membre éclairé Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Par défaut
    Je suis en train de refaire à 0 ce fichier puis-que:

    1) Quand je fais un pointage vers un fichier en require_once(), j'ai une URL de la forme absolu /var/www/bullecms/engine/moteur.inc
    2) Quand je fais un appel dans mon template à un fichier css je me retrouve avec une URL absolu de la forme templates/exilience/mentions.css
    3) Quand je crée un lien en absolu toujours, j'écris <a href="/bullecms/index.php">index.php</a><br />

    Constatation, sans parlé de htaccess, au sein même d'une simple page, pour aller cherché des fichiers et m'y référé, j'ai 3 types d'url différentes et srtiut de racine différente. Donc mon problème se porte la !

    Pourquoi, alors que je suis dans un même fichier, pour accéder à tel ou tel fichier je ne peux pas employer la même racine ?

    Quand j'aurais réussi à combler cette horrible chose, nous re parlerons htaccess.

    Merci

  7. #7
    Membre éclairé Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Par défaut
    J'ai un élément de réponse
    Le problème se situerais dans l'emploie de virtualhost.

    Je m'explique. A la racine de mon serveur www donc, j'ai plusieurs sites. Tout se passait bien cr j'étais en url relative. Pour des besoins de stabilités, je suis obliger aujourd'hui de passé en url absolu. A la suite de recherches, je me suis vue lire que le problème pouvais être au niveau du virtualhost.

    Seulement voila pouvons nous écrire ces deux fichiers qui suivent ?
    Fichier bullecms
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <VirtualHost *:80>
         ServerAdmin bip.bipbip@gmail.com
         # Nom du server
         ServerName helium
         ServerAlias www.bipbip.com/bullecms
     
         # Définition du répertoire racine du site bullecms
         DocumentRoot /var/www/bullecms/
    </VirtualHost>
    Fichier toto
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <VirtualHost *:80>
         ServerAdmin bip.bipbip@gmail.com
         # Nom du server
         ServerName helium
         ServerAlias www.bipbip.com/toto
     
         # Définition du répertoire racine du site toto
         DocumentRoot /var/www/toto/
    </VirtualHost>
    Est-ce que si je tape www.bipbip.com/bullecms/ ça ira dans le répertoire bullecms et si je tape www.bipbip.com/toto/ ça ira dans le répertoire toto ?

    Merci

  8. #8
    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
    Par défaut
    Tes ServerAlias sont incorrects : tu ne peux y mettre qu'un nom, pas de chemin, donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ServerAlias www.bipbip.com
    sauf que ça te ferait 2 VH avec le même ServerAlias. Dans ce cas, Apache ne prendra en compte que l'un des deux : le premier des deux qu'il trouvera.

    Ce que tu cherches à faire ne se paramètre pas avec des ServerAlias mais des Alias qui permettent de mapper des chemins d'URL sur des répertoires (qui ne sont généralement pas dans le document root).

    Je n'ai pas suivi toute la discussion mais il me semble qu'avec les (Server)Alias, nous sommes assez loin de la demande initiale d'URL rewriting Tu peux reformuler la demande ?

    Pour info, <a href="index.php"> et <a href="/index.php"> sont toutes les deux des URL relatives la première est relative à l'URL de la page courante, l'autre relative à la racine du site. Les URL absolues sont les URL complètes avec le protocole suivi de :// etc.

  9. #9
    Membre éclairé Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Par défaut
    Et beh,

    Plus j'avance plus j'ai l'impression que c'est le Mer**** !

    Si je résume, au départ le but étais avec un simple htacces de faire en sorte que toutes pages d'un même site pointe sur l'index.php du même site. La ou ça c'est compliqué c'est que selon que je sois en développement interne ou externe, je n'ai plus les mêmes liens !

    Le chemin relatif est donc la meilleure solution, sauf que bizarrement au sein même d'une même page, je me retrouve pour le même répertoire à utilisé trois types d'url !

    Il y a donc un réel souci de fonctionnement et de partage des données au sein même d'un même serveur.

    Toujours pour résumé.
    Afin qu'Apache2 sache quoi faire, j'ai voulue y ajouter des virtualhost qui semble faire pointer au bon endroit, mais en réalité toujours le même. Du coup mes autres sites locaux ne sont plus disponible !

    Alors je patauge ! Je ne sait plus quoi faire ni qui croire !

    Faire un serveur par site me reviendrais beaucoup trop chère, il faut que je gère l'interne mais aussi l'externe sur plusieurs site. Au moins quand j'utilisai des URL relative je n'avais aucun soucis. Là je tourne en rond et j'ai pas l'impression d'avancer.

  10. #10
    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
    Par défaut
    Si j'ai bien compris, l'environnement de développement et de production sont sur le même serveur ?

    Si c'est le cas, pour ce que tu veux faire, les hôtes virtuels sont une bonne solution à condition bien entendu de les configurer comme il faut, donc avec 2 noms différents pour chacun d'eux, avoir mis les NameVirtualHost qui vont bien (dans ton cas, il faut mettre NameVirtualHost *:80 quelque part dans ta conf Apache) et que le contenu des document roots des deux VH soient les mêmes. S'il faut que tu rajoutes un répertoire (http://dev.com/repertoire_en_plus/) dans ton URL, c'est raté : dans ce cas, c'est certain que tu auras des problèmes de chemins relatifs en passant d'un environnement à l'autre.

    Sinon, tu patauges, certes, mais sans donner plus de détails, notamment ta configuration Apache et tes .htaccess, on ne peut pas beaucoup t'aider plus.

  11. #11
    Membre éclairé Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Par défaut
    Alors voila,

    Depuis quelques jours maintenant j'ai trouvé une parade simple. Je travail directement comme si j'étais en affichage en ligne. Donc ça reviens plus qu'à un seul virtualhost.

    Toutefois, je vais me prendre un nom de domaine qui permettra de faire la différence entre helium (interne) et www.sousdomaine.nomdedomaine.fr qui lui permettra la mise en ligne. J'aurais donc deux VH différents.

    Merci

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

Discussions similaires

  1. Question existentielle : URL absolue vs. URL relative
    Par Bensor dans le forum Général Conception Web
    Réponses: 5
    Dernier message: 16/12/2008, 11h14
  2. Problème d'URL relative
    Par rad_hass dans le forum ASP.NET
    Réponses: 8
    Dernier message: 21/11/2008, 12h02
  3. Réponses: 1
    Dernier message: 11/03/2006, 21h19
  4. parser une url relative
    Par yule dans le forum Langage
    Réponses: 5
    Dernier message: 11/03/2006, 09h47
  5. [WebForms]Mettre l'URL relative vers un fichier
    Par Immobilis dans le forum Général Dotnet
    Réponses: 5
    Dernier message: 08/11/2005, 22h32

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