Réécriture d'URL...

Réécriture d'URL... - PHP - Programmation

Marsh Posté le 06-10-2005 à 13:00:04    

Navré, je ne savais pas où poster ailleurs...
 
J'ai toujours des problèmes avec l'URL Rewriting avec Apache...
 
Ce que je voudrais, c'est que je puisse aller sur des URLs du type :


j'ai donc mis cela :  

Code :
  1. RewriteEngine on
  2. RewriteRule ^(.*)/index.html recherchePays.php?pays=$1
  3. RewriteRule ^(.*)/(.*)/index.html dep.php?pays=$1&dep=$2
  4. RewriteRule ^(.*)/(.*)/(.*)/index.html ville.php?pays=$1&dep=$2&ville=$3 [L]


 
Mais ça ne fonctionne pas pour les départements (ni pour les villes je suppose)... alors je ne sais pas quoi faire... si j'inverse tous les RewriteRule, ça ne fonctionne pas non plus, et ça me renvoit sur une page d'erreur...
 
Je suis un peu perdu... si quelqu'un veut bien m'aider, ça serait sympa...  :ange:  
 
Détail sup. : quand je vais à http://www.site.com/France/Département1/index.html, dans mon script sur dep.php, quand je récupère les variables $_GET["dep"] = "Département1"; mais $_GET["pays"] = "recherchePays.php"... alors voila, si ça peut aider à trouver les erreurs (y'en a sûrement pas qu'une  :( )


---------------
Matt
Reply

Marsh Posté le 06-10-2005 à 13:00:04   

Reply

Marsh Posté le 06-10-2005 à 13:06:59    

Déjà dans cet ordre tes règles ne risquent pas de matcher, vu que la première englobe les deux suivantes.
 
Ensuite, (.*) est par défaut "greedy", ça veut dire qu'avec un début de masque en ^(.*)/ sur une url en blabla/truc/chose/machin.html, la parenthèse va matcher blabla/truc/chose et pas juste blabla.
 
Donc idéalement ici, tu mets pas (.*) mais ([^/]+), et tu inverses tes règles. (Et tu rajoutes des [L] partout tant qu'à faire.)


Message édité par sielfried le 06-10-2005 à 13:07:43
Reply

Marsh Posté le 06-10-2005 à 13:15:34    

c'est vrai que ça serait mieux pour le "/"...
mais à quoi sert le[L]
 
Merci des conseils !


---------------
Matt
Reply

Marsh Posté le 06-10-2005 à 13:33:52    

Ca dit au truc de s'arrêter si l'une des règles matche.

Reply

Marsh Posté le 06-10-2005 à 13:42:08    

ok!
bin merci beaucoup! ça marche !
 
par contre, reste un détail. Maintenant, j'aimerais faire en sorte que si le gars va sur http://www.monsite.com/admin ou http://www.monsite.com/admin/, eh bien qu'il arrive justement sur http://www.monsite.com/admin/index.php


---------------
Matt
Reply

Marsh Posté le 06-10-2005 à 13:44:31    

Y'a pas besoin d'url rewriting pour ça, c'est automatique à moins que ton apache soit configuré super bizarrement. :spamafote:

Reply

Marsh Posté le 28-11-2005 à 10:57:36    

Hello !
J'ai un petit problème :  
J'avais écrit :  
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/index.html ville.php?pays=$1&canton=$2&region=$3&ville=$4&page=1
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/liste_([01-9]+).html ville.php?pays=$1&canton=$2&region=$3&ville=$4&page=$5
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/index.html region.php?pays=$1&canton=$2&region=$3
RewriteRule ^([^/]+)/([^/]+)/index.html canton.php?pays=$1&canton=$2
RewriteRule ^([^/]+)/index.html recherchePays.php?pays=$1
 
 
Mais maintenant, j'aimerais que quand le visiteur va sur  
http://www.monsite.com/articleUnTel/
ça le redirige sur www.monsite.com/produit.php?nom=articleUnTel
j'ai essayé :
RewriteRule ^([^/]+)/ produit.php?nom=$1
 
mais ça ne marche pas... quelqu'un pourrait-il m'aider ?
 
edit : ça ne marche pas, parce que quand je vais sur www.monsite.com/France/index.html ça ne me redirige pas sur la bonne page (rien du tout en fait, ou alors la page produit.php, mais pourquoi ?


Message édité par SatanKoRn le 28-11-2005 à 10:58:50

---------------
Matt
Reply

Marsh Posté le 28-11-2005 à 11:03:06    

J'ai pas le temps de regarder en détails là (dois partir), mais pourquoi un espace entre le / et produit.php dans ta règle ?


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 28-11-2005 à 12:31:02    

parce que le but, c'est que quand tu vas sur  
http://www.monsite.com/ordinateurs/
ça te dirige sur
http://www.monsite.com/produit.php?nom=ordinateurs


---------------
Matt
Reply

Marsh Posté le 28-11-2005 à 13:18:00    

manquerait pas un .
 
RewriteRule ^(.[^/]+)/? produit.php?nom=$1
 
 
et je rajouterais un ? après le / au cas où l'url ne se terminerait pas par un /


Message édité par art_dupond le 28-11-2005 à 13:18:59

---------------
oui oui
Reply

Marsh Posté le 28-11-2005 à 13:18:00   

Reply

Marsh Posté le 28-11-2005 à 13:31:04    

ça n'a pas l'air d'être ça, parce que je n'arrive même plus à accéder au site comme ça... (donc à une page du genre www.monsite.com/page.php)


---------------
Matt
Reply

Marsh Posté le 28-11-2005 à 13:34:57    

oui mais ([^/]+)
 
ca récupère : RIEN (qui ne comprend pas "/" ) de longueur 1 ou plus. non ?


Message édité par art_dupond le 28-11-2005 à 13:44:11

---------------
oui oui
Reply

Marsh Posté le 28-11-2005 à 18:08:35    

Oui bon j'ai dit n'importe quoi plus haut, j'ai même pas eu le temps de lire le truc correctement.
 
Bon sinon, moi le masque m'a l'air bon. Et d'ailleurs je viens de le tester en local et il fonctionne nickel.
 
Si tu vas sur http://www.monsite.com/ordinateurs/ (avec le / à la fin), ça redirige pas et sort un 404 donc ? Etrange.
 
art_dupond : euh, ouais enfin [^/] ça veut dire tout sauf un slash, quoi. [:dawa]


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 28-11-2005 à 21:42:35    

avec RewriteRule ^([^/]+)/ fille.php?pseudo=$1, oui la redirection est ok. le seul problème est que cette redirection :  
RewriteRule ^([^/]+)/index.html recherchePays.php?pays=$1  
ne fonctionne plus... et je vois pas pourquoi...


---------------
Matt
Reply

Marsh Posté le 28-11-2005 à 21:45:25    

Tu les as mises dans quel ordre ? Si ^([^/]+)/ fille.php?pseudo=$1 est avant l'autre, forcément. Inverse les. :spamafote:


Message édité par sielfried le 28-11-2005 à 21:45:38

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 28-11-2005 à 21:54:13    

bah non, même si je mets ^([^/]+)/ fille.php?pseudo=$1 tout à la fin, ça ne marche pas...


---------------
Matt
Reply

Marsh Posté le 28-11-2005 à 22:14:18    

sielfried a écrit :

Oui bon j'ai dit n'importe quoi plus haut, j'ai même pas eu le temps de lire le truc correctement.
 
Bon sinon, moi le masque m'a l'air bon. Et d'ailleurs je viens de le tester en local et il fonctionne nickel.
 
Si tu vas sur http://www.monsite.com/ordinateurs/ (avec le / à la fin), ça redirige pas et sort un 404 donc ? Etrange.
 
art_dupond : euh, ouais enfin [^/] ça veut dire tout sauf un slash, quoi. [:dawa]


 
ok :)
 
je pensais qu'il fallait dire ce qu'on voulait avant de dire ce qu'on ne voulait pas.
 
au passage, j'ai aussi une question sur l'url rewriting http://forum.hardware.fr/forum2.ph [...] w=0&nojs=0 :jap:


Message édité par art_dupond le 28-11-2005 à 22:15:35

---------------
oui oui
Reply

Marsh Posté le 28-11-2005 à 23:03:42    

SatanKoRn a écrit :

bah non, même si je mets ^([^/]+)/ fille.php?pseudo=$1 tout à la fin, ça ne marche pas...


 
Balance ton .htaccess complet pour y voir plus clair stp.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 28-11-2005 à 23:10:29    

Voilà :  
 
 
RewriteEngine on
 
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/index.html ville.php?pays=$1&canton=$2&region=$3&ville=$4&page=1
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/liste_([01-9]+).html ville.php?pays=$1&canton=$2&region=$3&ville=$4&page=$5
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/index.html region.php?pays=$1&canton=$2&region=$3
RewriteRule ^([^/]+)/([^/]+)/index.html canton.php?pays=$1&canton=$2
RewriteRule ^([^/]+)/index.html recherchePays.php?pays=$1
 
 
RewriteRule ^(.+)images(.*)/([^/]+).gif images$2/$3.gif
RewriteRule ^(.+)images(.*)/([^/]+).jpg images$2/$3.jpg
 
RewriteRule ^(.*)/([^/]+).css http://www.monsite.com/$2.css
RewriteRule ^(.*)/([^/]+).class http://www.monsite.com/$2.class
RewriteRule ^(.*)/([^/]+).php http://www.monsite.com/$2.php
 
RewriteRule ^([^/]+).html fille.php?pseudo=$1
RewriteRule ^([^/]+)/ fille.php?pseudo=$1 [L]
 


---------------
Matt
Reply

Marsh Posté le 28-11-2005 à 23:35:55    

Testé en local et la dernière règle matche sans problème.
 
Tu tapes quelle url exactement ?


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 29-11-2005 à 21:54:27    

Reply

Marsh Posté le 30-11-2005 à 09:15:09    

Oui ben forcément, faut mettre des [L] après chaque ligne là sinon il les interprète "récursivement".


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 01-12-2005 à 22:23:16    

ah ! je vais tester ça ! Merci ;-)


---------------
Matt
Reply

Marsh Posté le 01-12-2005 à 22:35:37    

ok, merci beaucoup, ça marche pour presque tout... sauf pour les images qui ne s'affichent plus... par exemple :  
http://www.monsite.com/images/sh_2.gif


---------------
Matt
Reply

Marsh Posté le 01-12-2005 à 23:38:15    

Ton masque veut au moins un caractère avant "images" là...


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 02-12-2005 à 21:35:13    

j'ai changé le (.+) en (.*), mais ça ne marche tjs pas... je devrais modifier quoi à votre avis ?


---------------
Matt
Reply

Marsh Posté le 03-12-2005 à 08:18:08    

Ca devrait marcher, y'a pas de raison.
 
Mais j'me demande à quoi sert vraiment ce masque, là, il recopie presque exactement ce qu'il capte, à part ce qu'il y a éventuellement juste avant "images". [:figti]


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 12-12-2005 à 17:23:52    

justement c'est son but.  
 
ca devrait peut-être marcher, mais ce n'est pas le cas...
 
que dois-je faire ? :-(


---------------
Matt
Reply

Marsh Posté le 18-12-2005 à 19:11:34    

le problème, c'est que les images qui ne sont pas dans le dossier principal   (par exemple : www.monsite.com/images/france.gif) ne s'affiche pas...
 
que feriez-vous à ma place ?
 
PS : c'est urgent...

Reply

Marsh Posté le 18-12-2005 à 22:10:56    

J'ai changé et j'ai mis cela : (cependant, tout marche, sauf la redirection pour la page fille.php?pseudo=...)
 
 
RewriteEngine on
 
RewriteRule ^http://www.monsite.com/([^/]+)/ fille.php?pseudo=$1 [L]
 
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/index.html ville.php?pays=$1&canton=$2&region=$3&ville=$4&page=1 [L]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/liste_([01-9]+).html ville.php?pays=$1&canton=$2&region=$3&ville=$4&page=$5 [L]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/index.html region.php?pays=$1&canton=$2&region=$3 [L]
RewriteRule ^([^/]+)/([^/]+)/index.html canton.php?pays=$1&canton=$2 [L]
RewriteRule ^([^/]+)/index.html recherchePays.php?pays=$1 [L]
 
RewriteRule ^http://www.monsite.com/(.+)images(.*)/([^/]+).gif images$2/$3.gif [L]
RewriteRule ^http://www.monsite.com/(.+)images(.*)/([^/]+).jpg images$2/$3.jpg [L]
 
RewriteRule ^(.+)/([^/]+).css http://www.monsite.com/$2.css [L]
RewriteRule ^(.+)/([^/]+).class http://www.monsite.com/$2.class [L]
RewriteRule ^(.+)/([^/]+).php http://www.monsite.com/$2.php [L]
 

Reply

Marsh Posté le 04-07-2006 à 17:41:39    

Petit problème : j'ai cette règle toute bête  


RewriteEngine on
RewriteRule ^.*\.gif$  -  [L]
RewriteRule ^.*\.jpg$  -  [L]
RewriteRule ^.*\.jpeg$  -  [L]
RewriteRule ^.*\.png$  -  [L]
RewriteRule ^([a-z]+)$  http://www.monsite.eu/webcv/index.php5?cat=$1  [L]


 
Problème : quand j'entre l'adresse :  
http://www.monsite.eu/webcv/experience
l'url est bien réécrite, mais c'est justement l'adresse réécrite qui est affichée dans le navigateur. Je voudrais que ça affiche l'url "esthetique" ...


Message édité par El_gringo le 04-07-2006 à 18:00:19

---------------
Les Vers Solitaires, on aime ... ou pas !
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed