2010-02-03 4 views
5

je dois inclure un barres obliques facultatif à la fin, c'est un /, dans mon RewriteRuleexpression régulière .htaccess besoin de faire de queue barre oblique en option

Ce que j'ai à ce jour est

RewriteRule ^([a-zA-Z0-9]+)$ u.php?$1|$2 

Ce qui fonctionne bien , par exemple, http://foo.bar/abcde redirigera vers http://foo.bar/u.php?abcde et traitera tous les paramètres de chaîne de requête qui peuvent être présents.

Ce que je dois faire est de prendre http://foo.bar/abcde/ (avec l'arrière barres obliques) et rediriger vers http://foo.bar/u.php?abcde

Donc, si son présent, je dois retirer la barre oblique finale de 1 $ dans mon RewriteRule. Comment puis-je faire cela? Je suis nouveau à Apache et j'ai essayé plusieurs règles regex mais je ne peux pas le faire correctement.

Répondre

14

Il suffit de mettre /? avant la $ à la fin de votre modèle:

RewriteRule ^([a-zA-Z0-9]+)/?$ u.php?$1 

Mais je préférerais vous suggère d'autoriser une seule orthographe (avec ou sans slash) et rediriger l'autre:

# remove trailing slash 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule (.*)/$ /$1 [L,R=301] 
# add trailing slash 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule .*[^/]$ /$0/ [L,R=301] 
+0

@Phil: Non, ce n'est pas possible. La seule chose que vous pouvez faire est de le supprimer ou de l'ajouter à toutes les demandes. – Gumbo

+0

En fait, pour ce que j'essaie de réaliser, il est plus logique d'autoriser les deux orthographes, donc je vais utiliser deux règles de réécriture pour le moment, jusqu'à ce que je comprenne parfaitement ce que vous avez suggéré avec 'RewriteCond'. – Phil

+1

@Phil: Les deux conditions évitent uniquement de rediriger les requêtes qui peuvent être mappées vers des répertoires existants ('-d') ou vers des fichiers existants (' -f'). – Gumbo

Questions connexes