RewriteRule里正则表达式减号字符的顺序问题

Posted in 杂项 on January 20th, 2010 by Adam

在用URLRewrite的时候,PHP正则匹配(preg_match)的时候,常常有一个容易忽略的小问题:

有效:RewriteRule ([0-9a-zA-Z\+_\.\-]{3,})/$ /article\-$1.html [L]
无效:RewriteRule ([0-9a-zA-Z\-\+_\.]{3,})/$ /article\-$1.html [L]

仅仅是因为方括号内减号(-)字符顺序的不同,让正则匹配失效。
但这又不是普遍的问题,只是在个别虚拟主机上出现。

下面的解释可以帮我们释疑:

正则表达式通过使用元字符来编码在模式中,元字符不代表其自身,它们用一些特殊的方式来解析。
减号(-)字符可以在字符类中指定一个字符范围。例如,[d-m] 匹配了 d 和 m 之间的任何字符,包括两者。如果字符类中需要减号本身,则必须用反斜线转义或者放到一个不能被解释为指定范围的位置,典型的位置是字符类中的第一个或最后一个字符。

Tags: ,

Discuz7用firefox无法登录

Posted in PHP on January 19th, 2010 by Adam

Discuz论坛从5.5升级到6.0,然后再升级到7.0,升级过程很顺利,可是在FireFox3.5.7下用管理员或其它普通用户登录的时候,虽然显示登录成功,但是跳转后还是回到登录窗口。IE8下没有这个问题。

Tags:
RSS Feed