1

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?

2
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. – Lèse majesté Feb 27 '11 at 1:39
  • @Lèse majesté Mm, correct. It's reversed from what it should be. Fixed. – sysadmin1138 Feb 27 '11 at 1:42

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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