使用 IIS 重写清洁 URL:匹配“^”或“.*”之间有什么区别?
Using IIS Rewrite for Clean URLs: Any difference between matching "^" or ".*"?
我正在 IIS (v10.0) 配置文件中创建一个重写规则,以通过捕获所有传入请求并路由与物理目录不明确匹配的任何内容来启用干净的 URL(“漂亮的 URL”)或系统中的文件到单点进行处理。该规则当前如下所示:
<rule name="Absorbifier" stopProcessing="true">
<match url="^" ignoreCase="false" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
</conditions>
<action type="Rewrite" url="index.php" appendQueryString="true" />
</rule>
我发现了几个编写类似规则的好例子,我见过的用于捕获所有请求的最流行的正则表达式模式是这两个:
^
(从任意字符串的开头开始匹配)
.*
(匹配0个或多个除换行符外的任意字符)
我已经测试了这些模式中的每一个,但尚未发现它们的表现有任何差异。在我正在编写的规则的上下文中,这些结果在功能上是否等效?还是其中之一更擅长捕捉难以预测的边缘情况?
在此上下文中,两者的含义相同:
- regex
^
表示字符串的开头,即使是空字符串也是匹配项。
- 正则表达式
.*
表示直到下一个换行符的所有内容,并且是匹配项,即使对于空字符串也是如此。
我正在 IIS (v10.0) 配置文件中创建一个重写规则,以通过捕获所有传入请求并路由与物理目录不明确匹配的任何内容来启用干净的 URL(“漂亮的 URL”)或系统中的文件到单点进行处理。该规则当前如下所示:
<rule name="Absorbifier" stopProcessing="true">
<match url="^" ignoreCase="false" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
</conditions>
<action type="Rewrite" url="index.php" appendQueryString="true" />
</rule>
我发现了几个编写类似规则的好例子,我见过的用于捕获所有请求的最流行的正则表达式模式是这两个:
^
(从任意字符串的开头开始匹配).*
(匹配0个或多个除换行符外的任意字符)
我已经测试了这些模式中的每一个,但尚未发现它们的表现有任何差异。在我正在编写的规则的上下文中,这些结果在功能上是否等效?还是其中之一更擅长捕捉难以预测的边缘情况?
在此上下文中,两者的含义相同:
- regex
^
表示字符串的开头,即使是空字符串也是匹配项。 - 正则表达式
.*
表示直到下一个换行符的所有内容,并且是匹配项,即使对于空字符串也是如此。