在以下 htaccess 代码中,我想将 URL 从 site.com/user.php?id=user_id
更改为 site.com/u/user_id
。但是,此代码仅当用户名是字母数字时才有效。如果用户名包含任何下划线或点,我不知道该怎么办
RewriteRule ^u/(\w+)/?$ user.php?id=$1
有没有\w+
的替代品?
最佳答案
使用 .匹配任何字符,或使用 []
定义允许的字符列表元字符 \w
匹配任何字母、数字或下划线。
如果您还想匹配其他字符,则应该使用其他字符。
元字符.
匹配任何字符,因此这将是一个选项:RewriteRule ^u/(.+)/?$ user.php ?id=$1
或者,您可以在 []
之间定义一组允许的字符。要允许字母数字字符、下划线和点,您可以使用 RewriteRule ^u/([a-z0-9_\.]+)/?$ user.php?id=$1
。请注意,在这种情况下必须替换 .
,否则它将被解释为上面提到的元字符并匹配任何字符。
您还可以匹配除 /
之外的任何字符,这在匹配 URL 时特别有用:RewriteRule ^u/([^/]+)/?$ user.php?id=$1
。 []
内的前导 ^
使字符组匹配除列出的字符之外的任何内容,因此在本例中,除了 /之外的任何内容
.
关于regex - RewriteRule 接受下划线和点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29790668/