Given the following rewrite rule:

RewriteRule ^user/([^/]*)$ /userprofile.php?user=$1 [L]

How can I have it work either with or without a trailing slash?

Bonus points, how can I verify ([^/]*) contains only numerals?

1 Answer 1

RewriteRule ^user/([0-9]+)(/?)$    /userprofile.php?user=$1   [L]

The above rule should match on these conditions:

  • user/123
  • user/123/

It will not match:

  • user/fred
  • user/123fred
  • user/fred123

([0-9]+) means match any numeral with one or more digits.
(/?)$ means an optional match of a slash, followed by a mandatory end-of-string.

For extra credit, you can even use this:

RewriteRule ^user/([0-9]{1,9})(/?)$    /userprofile.php?user=$1   [L]

Which tells it to match numbers between one and nine digits (the {1,9} thing). Useful as an input-validator.

  • Is (?/) valid regex? It looks like a lookahead, but it's not. It seems like it ought to be /?, which would make the slash optional. Feb 27, 2011 at 1:39
  • @Lèse majesté Mm, correct. It's reversed from what it should be. Fixed. Feb 27, 2011 at 1:42

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.