2009-12-28 5 views
2

J'ai un petit problème en utilisant la fonction RouteIgniter route.CodeIgniter Route problème avec Regex

J'utilise le URI_Language_Identifier extension et je veux réacheminer tous les demandes de « lang/login » (par exemple en/login ou de/login) à l'utilisateur/login J'ai essayé d'utiliser la fonction de routes comme suit, mais il ne fonctionne pas:

$route['(\w{2})/login'] = "/user/index";

cela ne travail:

$route['en/login'] = "/user/index";
$route['de/login'] = "/user/index";

mais la version de travail est assez mauvaise, elle produira co redondante de et vous devez changer beaucoup si vous voulez ajouter une nouvelle langue.

J'espère que quelqu'un a une réponse intelligente, comme d'habitude. Merci d'avance.

Répondre

2

ou essayez $ route [': any/login'] = "/ user/index";

+1

Cela semble fonctionner maintenant. Je ne sais pas pourquoi, mais les expressions régulières ne fonctionnent pas du tout. Merci quand même. –

0

Essayez quelque chose comme

$route['.+/login'] = "/user/index"; 

puisque vous n'avez pas besoin du code de langue adapté de toute façon. Je suppose que quelque chose ne va pas avec l'interprétation de votre expression (\w{2}), peut-être vous auriez aussi essayer quelque chose comme:

$route['[a-z]+/login'] = "/user/index"; 
1

Tous les itinéraires à l'aide RegEx doit être placé après les routes réservées de scaffolding_trigger et default_controller c'est très probablement votre problème.

+0

Malheureusement, je l'ai fait. –

0

Tous les 3 ne fonctionnent pas pour moi. Juste pour fournir un peu plus d'informations: Je l'exécute sur un serveur local.

Aussi j'ai un fichier .htaccess avec le code suivant:

AddCharset utf-8 .css .html .xhtml
Options +FollowSymlinks
RewriteEngine on RewriteBase /
RewriteCond $1 !^(index\.php|images|css|robots\.txt)
RewriteRule ^(.*)$ /www/veare/index.php/$1 [L]

je reçois une erreur 404.

J'espère que vous avez d'autres idées. Merci.

0

Voici le code qui gère la partie REGEX du routage:

// boucle à travers le réseau de la route à la recherche de jokers

foreach ($this->routes as $key => $val) 
    {      
     // Convert wild-cards to RegEx 
     $key = str_replace(':any', '.+', str_replace(':num', '[0-9]+', $key)); 

     // Does the RegEx match? 
     if (preg_match('#^'.$key.'$#', $uri)) 
     {   
      // Do we have a back-reference? 
      if (strpos($val, '$') !== FALSE AND strpos($key, '(') !== FALSE) 
      { 
       $val = preg_replace('#^'.$key.'$#', $val, $uri); 
      } 

      $this->_set_request(explode('/', $val));   
      return; 
     } 
    } 

Je voudrais essayer

$route['\w\w/login'] = "/user/index"; 
+0

Cela ne semble pas fonctionner aussi bien. Auriez-vous besoin de moi pour fournir plus d'informations? S'il vous plaît laissez-moi savoir comment je pourrais le rendre plus facile de m'aider, s'il y a de l'aide. Merci –

+0

Je pense que le problème est que CI ne m'aime pas en utilisant regex et un nom normal. Donc, je devrais aussi dire "login" dans regex. Malheureusement, je suis totalement stupide quand il s'agit de regex, alors comment ferais-je cela? –

0

Les travaux suivants pour moi (à condition que la langue soit toujours en minuscule):

$route['([a-z]{2})/login'] = '/user/index'; 

Comme l'a mentionné Watain, puisque vous n'avez pas besoin du langage correspondant.code, vous pouvez laisser tomber le '(' et ')'

$route['[a-z]{2}/login'] = '/user/index'; 
3

La vraie erreur & solution

Hey, juste si quelqu'un a le même problème, je trouve l'erreur réelle.

La est une ligne dans le route.php

//route example: http://domain.tld/en/controller => http://domain.tld/controller
$route['(\w{2})/(.*)'] = '$2';
$route['(\w{2})'] = $route['default_controller'];

Ceci est de l'extension.

Vous devez mettre tous vos itinéraires avant cela, comme dans les domaines suivants:

$route['(\w{2})/signup'] = "user/signup";
//route example: http://domain.tld/en/controller => http://domain.tld/controller
$route['(\w{2})/(.*)'] = '$2';
$route['(\w{2})'] = $route['default_controller'];

Merci pour toute l'aide dans ce poste de toute façon. Vous êtes formidable.