[Regex] Réecriture automatique d'URL

Réecriture automatique d'URL [Regex] - PHP - Programmation

Marsh Posté le 06-10-2006 à 22:49:18    

Bonsoir à tous,
 
Je suis en train de développer un site, en utilisant l'URL rewriting. Mais au lieu d'écrire l'url modifié dans le code HTML, je veux que ça soit automatique en utilisant les expressions régulières avec preg_match_all() et le remplacement avec strpintf().
 
exemple :
 

Code :
  1. <?php
  2. //code simplifié
  3. $url="index.php?lg=fr";
  4. function rewriteURL($url) {
  5. $extension=".html";
  6. if(preg_match_all("#index\.php\?lg=([a-z]{2})#Ui", $url, $matche, PREG_PATTERN_ORDER)) {
  7.  $format="lg-%s";
  8.  return sprintf($format, $matche[1][0]).$extension;
  9. }
  10. return $url;
  11. }
  12. echo rewriteURL($url);
  13. ?>


 
Dans ce cas, l'url est bien retournée. Mais en ayant par exemple :
 
$url = "index.php?lg=fr&test=toto";
 
L'url retourné est celle donné par sprintf, et non pas du dernier return (comme je l'esperais) qui devrait être l'url de départ.
J'ai bien mis l'option Ungreedy, mais ça déconne quelque part (enfin, c'est moi plutôt) et je n'arrive pas a trouver ou.
 
L'idée est d'avoir plusieurs if avec des preg_match_all et de trouver la regex qui correspond à l'URL, mais si ça bloque déjà sur la première regex ça va pas :/


Message édité par Surfoo le 06-10-2006 à 22:52:37
Reply

Marsh Posté le 06-10-2006 à 22:49:18   

Reply

Marsh Posté le 07-10-2006 à 13:47:10    

Je pige pas pourquoi tu te compliques a rajouter une fonction qui rewrite tes Url dans ta page.
 
Pourquoi ne pas mettre directement les URL rewritées dans ton code plutot ?
 
 
Edit: Ca se passe sur Free  :p


Message édité par supermofo le 07-10-2006 à 13:48:17
Reply

Marsh Posté le 07-10-2006 à 20:21:06    

supermofo > peut être qu'il veut que ca passe sur un serveur avec le rewriting d'URL et sur un autre sans.

Reply

Marsh Posté le 08-10-2006 à 14:31:32    

Ca n'est pas le sujet mais je vais répondre quand même :
- Pour pouvoir changer facilement le format de l'url sans aller dans toutes les pages du site.
- Activer ou désactiver l'URL rewriting facilement
- Le système de back office (pas réalisé par moi) pour écrire des liens internes au site n'utilise pas l'url rewriting mais les URL normales (exemple : index.php?lg=fr&rub=01&srub=02)
 
Donc tout ça pour dire que j'aimerais bien ce système de masque pour avoir les liens réecrit.
 
Donc pour l'instant j'ai modifié ma fonction, et ça fonctionne : (j'avais pas mis ^ et $)

Code :
  1. function rewriteURL($url) {
  2.    
  3.     $url=delaccent($url);
  4.    
  5.     $extension=".html";
  6.     $separateur="-";
  7.    
  8.     switch(TRUE) {
  9.         case (preg_match_all("#^index\.php\?lg=(\w{2})$#Usi", $url, $matche, PREG_PATTERN_ORDER)) :
  10.             $format="%s";
  11.             $urlrewrite = sprintf($format, $matche[1][0]).$extension;
  12.             break;
  13.            
  14.         case (preg_match_all("#^index\.php\?lg=(\w{2})&rub=([\w-]*)$#Usi", $url, $matche, PREG_PATTERN_ORDER)) :
  15.             $format="%s/test-%s";
  16.             $urlrewrite = sprintf($format, $matche[1][0], $matche[2][0]).$extension;
  17.             break;
  18.            
  19.         case (preg_match_all("#^index\.php\?lg=(\w{2})&rub=([\w-]*)&srub=([\w-]*)$#Usi", $url, $matche, PREG_PATTERN_ORDER)) :
  20.             $format="%s/rub-%s/srub-%s";
  21.             $urlrewrite = sprintf($format, $matche[1][0], $matche[2][0], $matche[3][0]).$extension;
  22.             break;   
  23.         default:
  24.             $urlrewrite = $url;
  25.     }
  26.    
  27.     return $urlrewrite;
  28. }


 
donc dans ce cas, je dois faire comme dans le .htaccess : ecrire tous les masques correspondant à mes URL.
 
Mais pour que ça soit plus simple, je voudrais avoir un tableau qui me retourne le nom de la page, les arguments, et les valeurs des arguments. Donc j'en suis arrivé à ça :
 

Code :
  1. preg_match_all("#^([\w-\.]+)\?(([\w-]+)=([\w-]*)(&?)+)$#si", $url, $matched, PREG_SET_ORDER);


 
Le problème c'est que ça ne marche pas vraiment et que je ne connais pas les regex à fond... Alors si quelqu'un à une idée pour résoudre ça, c'est cool  :jap:

Reply

Marsh Posté le 03-05-2012 à 04:47:19    

c'est pas plus simple avec un .htaccess ??

Reply

Sujets relatifs:

Leave a Replay

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