-1

我正在尝试使用 IIS URL 重写将用户带到 WWW 域而不是非 WWW。我遇到了一篇文章,它使用以下正则表达式来匹配域名:

^[^\.]+\.[^\.]+$

我无法弄清楚这个正则表达式匹配什么样的域。这是完整的代码:

<rule name="www redirect" enabled="true" stopProcessing="true">
  <match url="." />
  <conditions>
    <add input="{HTTP_HOST}" **pattern="^[^\.]+\.[^\.]+$"** />
    <add input="{HTTPS}" pattern="off" />
  </conditions>
  <action type="Redirect" url="http://www.{HTTP_HOST}/{R:0}" />
</rule>
<rule name="www redirect https" enabled="true" stopProcessing="true">
  <match url="." />
  <conditions>
    <add input="{HTTP_HOST}" **pattern="^[^\.]+\.[^\.]+$"** />
     <add input="{HTTPS}" pattern="on" />
    </conditions>
   <action type="Redirect" url="https://www.{HTTP_HOST}/{R:0}" />
</rule>
4

1 回答 1

3
^     # anchor the pattern to the beginning of the string
[^\.] # negated character class: matches any character except periods
+     # one or more of those characters
\.    # matches a literal period
[^\.] # negated character class: matches any character except periods
+     # one or more of those characters
$     # anchor the pattern to the end of the string

锚点对于确保域周围没有任何不允许的内容很重要。

正如 Tim Pietzker 所提到的,句点不需要在字符类中转义。

要回答您的问题,最基本的方法是:这匹配什么?任何恰好包含 one 的字符串,.它既不是第一个也不是最后一个字符。

于 2012-12-07T14:53:26.577 回答