2010-07-17 5 views
0

J'utilise apache et j'ai besoin de réécrire l'URL de type:Apache Rewrite Règle (Regex)

/a/b/c/d/frontière/stuff *

à:

/frontière/a_b_c_d/stuff *

je dois réécrire le premier Uri au second format.

Le nombre d'éléments avant «/limite » sont variables et je veux remplacer toutes les barres obliques («/») entre les éléments par « _ »

Le mot frontière est toujours le même.

je crois que je dois faire faire deux règles, l'une pour slash remplacer et une autre de changement de limite au début de l'URL: (. *?)

La deuxième règle, je pense est quelque chose comme ^// \ bboundary \ b à /boundary/$ 1

Est-il possible de réaliser ce que je veux?!

Comment ?!

Merci.

EDIT

Je veux correspondre jusqu'au premier mot frontière, il est possible d'avoir une URL comme

/a/b/c/d/limite/limite

EDIT

Gumbo merci pour votre aide

en fonction de vos règles de réécriture j'ai réussi à en créer un.

+0

est le nombre d'éléments avant illimité limite ou au plus n niveaux de profondeur. Si vous savez qu'il n'y a que n niveaux, écrire n regex serait probablement beaucoup plus simple. –

+0

oui, ils sont illimités – fampinheiro

Répondre

3

Essayez ces règles:

RewriteRule ^/([^/]+)/(.+)/boundary/([^/]+)$ /$1_$2/boundary/$3 [N] 
RewriteRule ^/([^/]+)/boundary/([^/]+)$ /boundary/$1/$2 [L] 

Soyez prudent avec les premières règles avec le drapeau N provoque une réécriture interne sans incrémenter le compteur interne. Les chances sont donc que vous ayez une récursion infinie.


Modifier Une fois que vous avez changé votre question:

RewriteCond $1 !=boundary 
RewriteCond $2 !=boundary 
RewriteRule ^/([^/]+)/([^/]+)(/.*)?$ /$1_$2$3 [N] 
RewriteRule ^/([^/]+)/boundary(/.*)$ /boundary/$1$2 [L] 
+0

Sidenote: S'ils sont dans un contexte par répertoire ('.htaccess'), les modèles de test' RewriteRule' devraient perdre la barre oblique initiale.Cela a fonctionné parfaitement sur mon serveur de test en utilisant l'exemple de la question, +1 –

+0

@Tim: Merci pour les tests. – Gumbo

+0

J'ai édité la question .. vos règles sont presque là. – fampinheiro