Home > Blockchain >  htaccess rewrite rule for account nickname
htaccess rewrite rule for account nickname

Time:03-15

I have htaccess rewrite rule that allows account nickname to be like domain.com/its_super-nick.name3000

Here is the regular expression I use, but it gives me an Internal Error back

RewriteRule ^([A-Za-z0-9-_.] )/?$ index.php?cl=account&username=$1

Am I doing something wrong?

CodePudding user response:

RewriteRule ^([A-Za-z0-9-_.] )/?$ index.php?cl=account&username=$1

The "problem" here is that the regex also matches index.php (the rewritten URL). So, username=index.php will result from a second pass through the rewrite engine. (By itself, this shouldn't cause an "Internal Error" - if by that you mean a "500 Internal Server Error" - but in combination with other directives this could result in a rewrite loop, ie. a 500 Error)

And you are missing the L (last) flag.

The placement of the hyphen towards the end of the character class (as mentioned in the other answer) isn't actually an issue in this case (it will match a literal hyphen), however, you should move it to the start or end of the character class to avoid any ambiguity (and improve readability).

Try the following instead:

RewriteRule ^(?!index\.php$)([\w.-] )/?$ index.php?cl=account&username=$1 [L]

This uses a negative lookahead to avoid matching index.php.

The shorthand character class \w is the same as [A-Za-z0-9_].

CodePudding user response:

Perhaps it's because of 9-_ as you probably wanted to match "A" to "Z", "a" to "z", "0" to "9" and then the chars "-", "_" and ".".

In this case you have to put the hyphen at the end:

RewriteRule ^([A-Za-z0-9_.-] )/?$ index.php?cl=account&username=$1
  • Related