2010-10-01 5 views
15

Je suis en train de rediriger une série d'URL statiques, et je veux que cela fonctionne si le slash est présent ou non:Apache règle de réécriture qui fonctionne avec ou sans slash

/foo/bar ---> /tacos 
/foo/bar/ --> /tacos 

Je ai essayé ce qui suit, et toutes sortes de variations, mais je reçois toujours un match seulement avec le slash présent:

RewriteRule ^foo/bar?/$ http://url.com/tacos 
RewriteRule ^foo/bar(?/)$ http://url.com/tacos 
RewriteRule ^foo/bar*/$ http://url.com/tacos 
RewriteRule ^foo/bar(*/)$ http://url.com/tacos 

Je me sens comme je manque quelque chose évidente. Aidez-moi?

Répondre

27

Autre que dans EBNF ou ABNF, un quantificateur dans les expressions régulières fait référence à l'expression précédente et non à l'expression suivante. Alors:

RewriteRule ^foo/bar/?$ http://url.com/tacos 
+0

Ha, je savais que c'était quelque chose de stupide comme ça. :) Merci! –

+6

Le point d'interrogation indique "Je vais avoir 0 ou 1 slashes." Vous allez dans un restaurant et dites "Je vais avoir un taco?" Vous dites vraiment "Je vais avoir 0 ou 1 tacos." – bobobobo

+0

A travaillé très bien pour nous. Merci –

3

Essayez

RewriteRule ^foo/bar/?$ http://url.com/tacos 
13

Si vous voulez faire correspondre foo/bar, peu importe si elle est suivie d'une autre partie du chemin, vous pouvez dire:

RewriteRule ^foo/bar(/.*|$) http://url.com/tacos 

Cela correspondra l'un des éléments suivants:

foo/bar 
foo/bar/ 
foo/bar/baz 

Cela signifie: correspondre soit a) à une barre oblique suivie de 0 caractères ou plus, soit b) à la fin de la chaîne.

D'autre part, ceux-ci pourraient être indésirables:

RewriteRule ^foo/bar/? http://url.com/tacos  # This also matches foo/barb 
RewriteRule ^foo/bar/?$ http://url.com/tacos # This will not match foo/bar/baz 
Questions connexes