帐户昵称的 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_]
相同。
我有 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_]
相同。