如何在 Apache RewriteRule 中向正则表达式添加 +(加号)?
Posted
技术标签:
【中文标题】如何在 Apache RewriteRule 中向正则表达式添加 +(加号)?【英文标题】:How to add + (plus) to regex in Apache RewriteRule? 【发布时间】:2022-01-05 08:35:27 【问题描述】:我目前在我的.htaccess
文件中有以下内容,它会重写 A-Z、1-9、a-z 和 - 对 php 文件的输入:
RewriteRule ^([A-Za-z0-9-]+)/?$ index.php?url=$1 [L]
我需要在正则表达式中添加 +。我该怎么做?
我试过了:
RewriteRule ^([A-Za-z0-9-+]+)/?$ index.php?url=$1 [L]
我还查看了几个正则表达式备忘单,它们确实没用。
【问题讨论】:
您要匹配的实际 URL 是什么? 【参考方案1】:从表面上看,您发布的正则表达式是“OK”并且应该可以工作(尽管您应该考虑对字符类中的最后一个连字符进行反斜杠转义,或者将其移动到字符类中的最后一个字符,以便避免任何未来的歧义,因为它被解释为 range 指示符)。 +
可以在字符类中不转义使用,因为它在这里没有特殊含义。
例如(复制/粘贴以下内容):
RewriteRule ^([A-Za-z0-9+-]+)/?$ index.php?url=$1 [L]
(已删除错误字符 - 见下文。)
或者,如果您也可以匹配下划线 (_
),那么您可以使用 \w
(单词字符)速记字符类来简化它:^([\w+-]+)/?$
但是,您有一个软连字符 (U+00AD
) - 肉眼不可见 - 嵌入在字符类的每个范围之间,这可能会破坏正则表达式。例如,扩展隐藏的 unicode 字符,这是您尝试使用的实际(无效)正则表达式:
^([A-ZU+00ADa-zU+00AD0-9U+00AD-+]+)/?$
【讨论】:
谢谢你的这个 - 一个非常详细的解释它解决了我的问题。非常感谢,@MrWhite!以上是关于如何在 Apache RewriteRule 中向正则表达式添加 +(加号)?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Apache 中实现适用于所有虚拟主机的全局 RewriteCond / RewriteRule?
如何在 Apache Spark 中向 Kryo Serializer 注册类?
apache使用.htaccess文件中RewriteRule重定向后,URL中的加号无法解析