regex - RewriteRule 接受下划线和点

标签 regex apache .htaccess mod-rewrite

在以下 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/

相关文章:

java - 字符串的正则表达式,其中某个位置包含一个或多个字母

regex - 使用 htaccess 添加 # 符号并重定向到 url

php - 将复杂 URL 更改为简单 URL 并删除 Index.php

html 正文中的 PHP 未呈现

java - 从 Tomcat 7 迁移到 Tomcat 9,页面需要重新加载/刷新才能工作

PHP代码没有被执行,但是代码显示在浏览器源代码中

php - .htaccess mod_rewrite 对于漂亮的网址不起作用

regex - bash,在冒号前提取字符串

JavaScript RegEX 显式字符仅匹配一次

c# - 代号困惑