为干净的 URL 使用 IIS 重写:匹配“^”或“.*”之间有什么区别?

问题描述

我正在 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 DailyEarnings::with([ 'payout_cost','status:id,name' 'driver' => function($query) { $query->where('group_id',auth()->user()->group->id)->with('user'); } ]) ->whereHas('driver',function($query) { $query->where('group_id',auth()->user()->group->id); }) ->whereDate('created_at',now()->format('Y-m-d')) ->get(); 表示字符串的开头,并且是匹配项,即使是空字符串也是如此。
  • regex ^ 表示直到下一个换行符为止的所有内容,并且是匹配项,即使对于空字符串也是如此。