Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Serveurs (Apache, IIS,...) > Apache
Apache Forum d'entraide Apache. Avant de poster : Cours Apache, FAQ Apache
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/12/2010, 21h06   #1
Membre du Club
 
Avatar de Microbulle
 
Alexandre
Dessinateur et webmaster
Inscription : janvier 2005
Messages : 357
Détails du profil
Informations personnelles :
Nom : Alexandre
Âge : 34
Localisation : France, Corrèze (Limousin)

Informations professionnelles :
Activité : Dessinateur et webmaster
Secteur : Communication - Médias

Informations forums :
Inscription : janvier 2005
Messages : 357
Points : 66
Points : 66
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 :
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 :
Citation:
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 :
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
Microbulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2010, 10h18   #2
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 695
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 695
Points : 3 262
Points : 3 262
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.

Citation:
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 :
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.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2010, 10h43   #3
Membre Expert
 
Avatar de Mahefasoa
 
Inscription : octobre 2003
Messages : 787
Détails du profil
Informations personnelles :
Âge : 37
Localisation : Madagascar

Informations forums :
Inscription : octobre 2003
Messages : 787
Points : 1 068
Points : 1 068
Envoyer un message via Yahoo à Mahefasoa Envoyer un message via Skype™ à Mahefasoa
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 :
1
2
RewriteRule ^(.+)\.html$   http://helium/bullecms/$1.php [L]
Au lieu de
Code :
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 :
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,
__________________
La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici nous avons réuni théorie et pratique: Rien ne fonctionne ... et personne ne sait pourquoi!
Albert Einstein
Mahefasoa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2010, 11h34   #4
Membre du Club
 
Avatar de Microbulle
 
Alexandre
Dessinateur et webmaster
Inscription : janvier 2005
Messages : 357
Détails du profil
Informations personnelles :
Nom : Alexandre
Âge : 34
Localisation : France, Corrèze (Limousin)

Informations professionnelles :
Activité : Dessinateur et webmaster
Secteur : Communication - Médias

Informations forums :
Inscription : janvier 2005
Messages : 357
Points : 66
Points : 66
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
Microbulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2010, 14h05   #5
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 273
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 273
Points : 8 559
Points : 8 559
Il y a quoi dans ton .htaccess, maintenant (donne tout le contenu du fichier, s'il te plaît) ?
__________________

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
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2010, 15h10   #6
Membre du Club
 
Avatar de Microbulle
 
Alexandre
Dessinateur et webmaster
Inscription : janvier 2005
Messages : 357
Détails du profil
Informations personnelles :
Nom : Alexandre
Âge : 34
Localisation : France, Corrèze (Limousin)

Informations professionnelles :
Activité : Dessinateur et webmaster
Secteur : Communication - Médias

Informations forums :
Inscription : janvier 2005
Messages : 357
Points : 66
Points : 66
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
Microbulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2010, 16h42   #7
Membre du Club
 
Avatar de Microbulle
 
Alexandre
Dessinateur et webmaster
Inscription : janvier 2005
Messages : 357
Détails du profil
Informations personnelles :
Nom : Alexandre
Âge : 34
Localisation : France, Corrèze (Limousin)

Informations professionnelles :
Activité : Dessinateur et webmaster
Secteur : Communication - Médias

Informations forums :
Inscription : janvier 2005
Messages : 357
Points : 66
Points : 66
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 :
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 :
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
Microbulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2010, 18h30   #8
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 273
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 273
Points : 8 559
Points : 8 559
Tes ServerAlias sont incorrects : tu ne peux y mettre qu'un nom, pas de chemin, donc :
Code :
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.
__________________

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
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2010, 07h44   #9
Membre du Club
 
Avatar de Microbulle
 
Alexandre
Dessinateur et webmaster
Inscription : janvier 2005
Messages : 357
Détails du profil
Informations personnelles :
Nom : Alexandre
Âge : 34
Localisation : France, Corrèze (Limousin)

Informations professionnelles :
Activité : Dessinateur et webmaster
Secteur : Communication - Médias

Informations forums :
Inscription : janvier 2005
Messages : 357
Points : 66
Points : 66
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.
Microbulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2010, 22h45   #10
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 273
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 273
Points : 8 559
Points : 8 559
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.
__________________

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
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2010, 20h34   #11
Membre du Club
 
Avatar de Microbulle
 
Alexandre
Dessinateur et webmaster
Inscription : janvier 2005
Messages : 357
Détails du profil
Informations personnelles :
Nom : Alexandre
Âge : 34
Localisation : France, Corrèze (Limousin)

Informations professionnelles :
Activité : Dessinateur et webmaster
Secteur : Communication - Médias

Informations forums :
Inscription : janvier 2005
Messages : 357
Points : 66
Points : 66
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
Microbulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h14.


 
 
 
 
Partenaires

Hébergement Web