如何在 Apache RewriteRule 中向正则表达式添加 +(加号)?

How to add + (plus) to regex in Apache RewriteRule?

目前我的 .htaccess 文件中有以下内容,它将 A-Z、1-9、a-z 和 - 输入重写到 PHP 文件中:

RewriteRule ^([A-Z­a-z­0-9­-]+)/?$ index.php?url= [L]

我需要在正则表达式中添加 +。我该怎么做?

我试过:

RewriteRule ^([A-Z­a-z­0-9­-+]+)/?$ index.php?url= [L]

我也看了几个正则表达式的备忘单,真的没什么用。

从表面上看,您发布的正则表达式“正常”并且应该可以工作(尽管您应该考虑反斜杠转义字符 class 中的最后一个连字符,或者将其移动到字符 class,以避免将来因将其解释为 range 指示符而产生任何歧义)。 + 可以在字符 class 中不转义使用,因为它在这里没有特殊含义。

例如(copy/paste以下):

RewriteRule ^([A-Za-z0-9+-]+)/?$ index.php?url= [L]

(已删除错误字符 - 见下文。)

或者,如果您也可以匹配下划线 (_),那么您可以使用 \w(单词字符)shorthand 字符 class稍微简化一下:^([\w+-]+)/?$

但是,您有一个软连字符 (U+00AD) - 肉眼不可见 - 嵌入在字符 class 的每个范围之间,这可能会破坏正则表达式。例如,扩展隐藏的 unicode 字符,这是您尝试使用的实际(无效)正则表达式:

^([A-ZU+00ADa-zU+00AD0-9U+00AD-+]+)/?$