如何在 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-Z­a-z­0-9­-]+)/?$ index.php?url=$1 [L]

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

我试过了:

RewriteRule ^([A-Z­a-z­0-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中的加号无法解析

。htaccess对RewriteRule的帮助

htaccess Apache RewriteRule .asp 到 .php

Apache中 RewriteRule说明