帐户昵称的 htaccess 重写规则

htaccess rewrite rule for account nickname

我有 htaccess 重写规则,允许帐户昵称像 domain.com/its_super-nick.name3000

这是我使用的正则表达式,但它返回一个内部错误

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

我是不是做错了什么?

可能是因为 9-_ 因为您可能想要匹配“A”到“Z”、“a”到“z”、“0”到“9”,然后是字符“-” , "_" 和 ".".

在这种情况下,您必须将连字符放在末尾:

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

这里的“问题”是正则表达式也匹配index.php(重写的URL)。因此,username=index.php 将来自第二次通过重写引擎。 (就其本身而言,这不应导致“内部错误”——如果你的意思是“500 内部服务器错误”——但结合其他指令,这可能会导致重写循环,即 500 错误)

并且您缺少 L (last) 标志。

字符 class 末尾连字符的位置(如另一个答案中所述)在这种情况下实际上不是问题(它将匹配文字连字符),但是,您应该将它移到字符的开头或结尾 class 以避免任何歧义(并提高可读性)。

请尝试以下操作:

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

这使用否定前瞻来避免匹配 index.php

shorthand字符class\w[A-Za-z0-9_]相同。