URL rewriting...le début...les bases ??

WRInaute discret
Bonjour,

Je souhaite profiter de la remise à plat complète de mon site pour envisager en plus de l'url-rewriting. 8O
Mes questions vont certainement vous paraitre basiques et digne d'un newsbies...mais j'en suis un !! :wink:
Mon premier souci : quelle est la strcuture de site la mieux adaptée à l'urlrewrite ??

A savoir :
- Mon site est construit en php et utilise le système des pseudo frames
- J'ai donc une page unique index.php avec une variable page

Jusqu'a présent pour mieux me repérer j'utilisait le système de répertoires différents (chaque répertoire corresondant à un espace donné) ce qui pouvait me donner des adresses du style :
index.php?page=dossier/fichier
ou bien
index.php?page=dossier/fichier&var=1

Apparament ce sytème n'est pas judicieux pour le rewriting !

Donc comment faire ?
Avoir tous les fichiers scripts à la racine du site et utiliser un sytème de codage pour chaque fichier ?
Numéroter chaque page et n'appeller plus que des numéros ? (mais comment se repérer) ?ou bien
Utiliser un dossier pour chaque espace, avec un fichier index dans chaque dossier, mais qui n'appelle que des URL absolues !! Bonjour la maintenance si on a 25 dossiers (25 fichiers index à mettre à jour ??) !! :oops:
Et puis le problème des url absolues...comment on teste en local !! C'est l'horreur !!

ou bien

OUBLIER L'URLREWRITING....c'est réservé aux experts !! :cry:

J'ai beau réfléchir, mais je ne sais pas trop vers quelle solution m'orienter !
Toutes suggestions et encouragement seront les bienvenus !! :idea:

Merci à vous !!

Ben
 
WRInaute occasionnel
Quelques réponses et opinions :

senos a dit:
quelle est la strcuture de site la mieux adaptée à l'urlrewrite ?
La structure la plus importante est la structure apparente du site (celle visible par un navigateur). Ce qui se passe derrière, après réécriture, est essentiellement une question de goût personnel et surtout d'organisation.

Il n'y a pas vraiment de problème pour transformer
Code:
/dossier/fichier/1.htm
en
Code:
index.php?page=dossier/fichier&var=1
par exemple. En revanche, ce sera beaucoup plus facile de se retrouver dans les liens si la structure apparente est à peu près logique.

senos a dit:
OUBLIER L'URLREWRITING....c'est réservé aux experts
Mais non, mais non. Il faut juste être familier avec l'article WRI sur l'URL Rewriting, bien lire la doc de l'URL Rewriting, quelques exemples de cas concrets et essayer de comprendre les expressions régulières. Et méditer cette citation, en haut de la doc mod_rewrite
`` Despite the tons of examples and docs, mod_rewrite is voodoo. Damned cool voodoo, but still voodoo. ''

-- Brian Moore

senos a dit:
Et puis le problème des url absolues...comment on teste en local !! C'est l'horreur !!
En installant un serveur de test en local. Qui va de toute façon être nécessaire pour faire les tests de rewriting, donc...

Un peu encouragé, tout de même?
 
WRInaute discret
nikoshr a dit:
senos a dit:
Et puis le problème des url absolues...comment on teste en local !! C'est l'horreur !!
En installant un serveur de test en local. Qui va de toute façon être nécessaire pour faire les tests de rewriting, donc...
Un peu encouragé, tout de même?

Ben dison pas encore découragé...par contre j'ai déjà un serveur local Apache (easyphp sous windows)...mais comment lui faire lire des url absolues du style :

http://www.monsite.com/dossier/fichier ??

Je l'ai dis je suis un newbies...mais merci pour cette aide !!

Ben
 
WRInaute occasionnel
Pour ce qui est de l'URL Rewriting en local, il y a plusieurs discussions sur ce sujet : https://www.webrankinfo.com/forum/t/svp-de-laide-pour-un-essai-en-local-par-pitier.5832/ par exemple.

Pour l'hôte (www.monsite.com), deux solutions (au moins):
- soit déclarer une ligne
Code:
127.0.0.1       www.monsite.com
dans le fichier hosts (chercher ce fichier à partir du répertoire racine de Windows) et déclarer un vhost dans la conf Apache avec un ServerName www.monsite.com

- soit oublier complètement www.monsite.com et déclarer un vhost écoutant sur un port quelconque (8000 par exemple) et avoir des adresses du type h--p://localhost:8000/dossier/fichier . C'est ce que j'utilise et ca fonctionne très bien.

Quelle que soit la solution choisie, je recommande vivement d'avoir les liens dans le source HTML sous la forme
Code:
<a href='/dossier/fichier'></a>
ce qui fonctionne avec les deux solutions et ne demande pas de changements lors du passage en production.

Est-ce plus clair?
 
WRInaute discret
merci pour ton aide, mais tout cela c'est du chinois pour moi !! Mais je m'y met quand même. J'ai réussi à décoder la 1ère proposition (la 2ème j'ai rien compris)...mais ca marche pas.... :cry:

Voila ce que j'ai fais (merci à manucorp.com au passage) :

J'ai été dans apache/conf/httpd.conf

j'ai créé mon vhost en tapant ces lignes :

NameVirtualHost monsite.com
<VirtualHost 127.0.0.1>
ServerAdmin webmaster@monsite.com
DocumentRoot \www\monsite (mon site est situé dans le répertoire monsite sous www)
ServerName monsite.com
</VirtualHost>
#

Ensuite j'ai été dans host que j'ai pas trouvé. j'ai trouvé lmhost.sam sous
C:\WINDOWS\system32\drivers\etc\lmhost.sam

j'ai rentré les infos suivantes :

127.0.0.1 monsite.com et je l'ai enregistré sous host.sam

Ensuite j'ai redémarré apache, j'ai tapé dans le navigateur http://monsite.com

et ben rien "impossible de trouver la page", j'ai essayé d'enregistrer sous lmhost.sam...pas plus.

J'ai essayé de suivre tes indications et celle de manucorp.com...

mais je dois ps être bon à grand chose !
ou bien il me manque une info !!

Merci pour ton aide !!


Pour info j'utilise easyphp 1.6.0.0 et windows xp home

Ben

PS : Comment le navigateur fait-il la différence entre l'url virtuelle et la vrai si elles sont toutes les 2 identiques
 
WRInaute occasionnel
Alors:

- le fichier hosts n'a pas d'extension, c'est peut-être pour ca qu'il n'apparaît pas dans la recherche. Normalement, il se trouve dans le même répertoire que lmhosts.sam. Un bout d'explication sur le fichier hosts

- la directive NameVirtualHost indique sur quelle adresse IP les requêtes d'hôte virtuel doivent arriver. Pour l'instant, la mettre à * (toutes adresses) ou la commenter (mettre # devant)

- le directive DocumentRoot indique à partir de quel répertoire les URL vont être résolues par défaut. Normalement, ce sont des chemins absolus dans le système de fichier (pour EasyPHP, c'est peut-être différent, mais je ne connais pas). Sur Windows, un DocumentRoot pointant sur C:\apache\www s'écrirait c:/apache/www

Une conf qui fonctionne chez moi, en sus de la déclaration dans le hosts (désolé, mais là il va falloir que tu le trouves, a priori dans C:\WINDOWS\SYSTEM32\DRIVERS\ETC , ou alors le créer, avec uniquement la ligne ci-dessus dans ce répertoire)

Code:
#NameVirtualHost *
<VirtualHost monsite.com>
    ServerName monsite.com
    DocumentRoot d:/work/tmp
</VirtualHost>

Redémarrage d'Apache, et normalement ca marche avec un h--p://monsite.com/test.htm
Ne pas oublier d'appeler un fichier test.htm dans le répertoire de base :) .

Si monsite.com est un domaine existant, ca pose un problème, le fichier hosts prenant la main sur le DNS. Il suffit d'utiliser autre chose comme nom, par exemple test.monsite.com et tout le monde est content.
 
WRInaute discret
Bon on avance et merci encore pour ton aide....mais ca marche toujours pas :

Voila ce que j'ai tapé :

<VirtualHost monsite.com>
ServerName monsite.com
DocumentRoot /www/monsite
</VirtualHost>

J'ai fais un fichier host (sans extension) avec une ligne

127.0.0.1 monsite.com

et ca marche pas !!

Je pense que le probème vient de la directive root
si je met :
C:/Program Files/EasyPHP/www

J'ai un message d'erreur :
...
DocumentRoot takes one argument, Root directory of the document tree !

sachant que plus haut dans le fichier httpd.conf j'ai cette directive :

# First, we configure the "default" to be a very restrictive set of
# permissions.
#
<Directory />
Options FollowSymLinks Indexes
AllowOverride All
</Directory>

#
# Note that from this point forward you must specifically allow
# particular features to be enabled - so if something's not working as
# you might expect, make sure that you have specifically enabled it
# below.
#

#
# This should be changed to whatever you set DocumentRoot to.
#
<Directory "C:/Program Files/EasyPHP/www">

Et d'après moi, mais je suis pas un spécialiste, le problème doit venir de là, mais je sais pas comment faire pour le contourner.

En tous les cas c'est très sympa de me donner un peu de ton temps !! Grand merci

Ben
 
WRInaute occasionnel
Ca semble effectivement venir du DocumentRoot, et je dirais à cause de l'espace dans le chemin. Ca marchera peut-être mieux en le mettant avec des guillemets
Code:
DocumentRoot "C:/Program Files/EasyPHP/www"
ou alors, pour tester que ca vient bien de là, créer un répertoire tmp à la racine de C et mettre
Code:
DocumentRoot c:/tmp

Eventuellement, ca pourrait être intéressant de démarrer Apache en ligne de commande, pour voir s'il refuse une ou des directives. Pour ca, lancer une fenêtre DOS (Menu Démarrer/Exécuter, taper command et Entrée), se déplacer jusqu'au répertoire bin d'Apache, puis Apache.exe -k restart
 
WRInaute discret
Bon j'ai fais les test :

avec les guillemets il me le prend !!

en ligne de commande j'obtiens un message d'erreur :

Cannot resolve host name monsite.com ---ignoring !
Cannot read apache PID file c:program files/easyphp/apache/logs/httpd.pid

Alors là c'est plus du chinois mais de l'Inuit....je vais finir par devenir polyglotte :-)

Ben
 
WRInaute discret
Oups !!! Désolé !!

J'ai corrigé mais j'ai toujours :

Cannot read apache PID file c:program files/easyphp/apache/logs/httpd.pid

plus qu'une ligne on progresse !!

Ben
 
WRInaute occasionnel
Pour ca, je dirais que quelque part tu as une ligne qui parle de c:program files/easyphp/ alors que ca devrait être c:/program files/easyphp/
Genre ServerRoot. Non? Ou que le répertoire logs en question n'existe pas (improbable, mais bon)
 
WRInaute discret
Non, j'ai tout vérifié :

# ServerRoot: The top of the directory tree under which the server's
# configuration, error, and log files are kept.
#
ServerRoot "C:/Program Files/EasyPHP/apache"

Par contre si j'ai bien un répertoire log...j'ai pas de fichier httpd.pid !!

C'est quand même pas donné au commun des mortels !! lol

Ben
 
WRInaute discret
Oui le serveur fonctionne....ailleurs l fonctionne depuis le début puisque j'ai pu tester mes pages en php....
sauf que si j'appelle mon site par http://monsite.com...rien !! si je passe par localhost...alors la ca marche, mais je peux rien tester avec les url absolues!!

:-(

Ben
 
WRInaute discret
Un très très grand merci à nikoshr....pour sa disponiblité et ses clins d'oeil...voilà quelqu'un de vraiment sympa. Il faut quand même souligner...quand un inconnu vous aide sans hésiter et sans contreparti !!

Merci encore !!

Ben
 
Nouveau WRInaute
sinon, tu as une autre solution :

c ce que je fais sur mon site.

Tu crées dans une session une variable appelons la monsite

Puis tu affectes une valeur localhost quand tu travailles sur ta machine ou http://www.monsite.truc quand tu es on line...

Dans tes codes de page tu rappelles cette variable par un header (en general un fichier qui est en include en haut de page ou dans un global.asa mais ca c'est en ASP)

et tes URLs seront de la forme
print "<img src=\"".$monsite."/nomdelimage.jpg\" >"

Enfin, moi je travaille en ASP alors pardon pour la syntaxe PHP.

Ca fait que tu auras des URLs absolues en localhost/titi.xxx en local et en http://monsite.truc/titi.xxx quand tu seras en ligne.

Par contre, n'oublie pas de changer la valeur de la variable quand tu uploades ton site!!!!

En esperant que ca ait pu t'aider
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut