2011-05-19 1 views
1

J'ai un petit problème à résoudre. J'ai deux applications fonctionnant côte à côte (CodeIgniter et ExpressionEngine) et je dois router des modèles d'URL spécifiques vers CI et tout le reste vers EE. Jusqu'à présent, cela fonctionne surtout mais il y a un petit détail. Voici le code que j'ai actuellement:Correspondance sur une URL avec mod_rewrite uniquement avec un motif très spécifique

# Rewrite requests for anything that's not a CI controller or physical file/folder to ExpressionEngine 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond $1 !(admin|cron|fst_reporting|playcatch|ppv|purchase|reporting|xml) [NC] 
RewriteRule ^(.*)$ /index.php/$1 [L] 

# Route everything else to CodeIgniter 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /app/index.php/$1 [L] 

Cependant, je veux aussi pousser toute demande de:

/training 
/training/ 
/training/programme/something 
/training/programme/something/ 

à EE dans le premier bloc conditionnel et forcera les demandes d'un modèle d'URL spécifique

/training/something 

à l'application CI (voir dans le 2ème bloc conditionnel). Le problème que j'ai est d'essayer de mélanger les exigences ci-dessus dans mon instruction conditionnelle existante, idéalement je veux dire "Tout ce qui n'est pas égal à mes contrôleurs d'allumeur de code OU est égal à/training ou/training/program/something ". En attendant, je dois toujours pouvoir acheminer les demandes de/training/quelque chose (où quelque chose est une chaîne de caractères aléatoire) à l'application CI.

Des idées? :)

Répondre

2

Peut-être quelque chose comme:

RewriteBase/
RewriteCond %{REQUEST_URI} ^/training(/)?(/programme/something)?(/)? [OR] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond $1 !(admin|cron|fst_reporting|playcatch|ppv|purchase|reporting|xml) [NC] 
RewriteRule ^(.*)$ /index.php/$1 [L] 

espoir qui aide.

+0

Salut Rob, merci pour ce .., la partie (/ programme/quelque chose) doit correspondre sur un modèle tel que "/ programme/MTMwfG5pbmVmb3Vy" mais en même temps ne doit pas correspondre à une URL telle que "/ programme/sécurité incendie/formation ". C'est ce qui m'a vraiment bloqué. :/ –

+0

Désolé pour la réponse différée! Essayez ceci pour la taille: RewriteCond% {REQUEST_URI} ^/training (/)? (/ Program /)?(??.* training $) /? Cela devrait correspondre à tout ce qui commence avec la formation, qui pourrait avoir un programme, et qui a tout, pourvu qu'il regarde vers l'avenir et ne voit pas de «formation». Cela ne fonctionnera probablement que si vous utilisez Apache 2.x, parce que je pense que 1.x ne supporte pas les expressions régulières anticipées? J'espère que cela fonctionne pour vous. –

Questions connexes