Regex 正则表达式以匹配除特定路径之外的所有https URL

Regex 正则表达式以匹配除特定路径之外的所有https URL,regex,iis,url-rewriting,Regex,Iis,Url Rewriting,我需要一个正则表达式,它将匹配除特定路径之外的所有https URL e、 g 匹配 不匹配 * 这就是我到目前为止所做的: <rule name="Redirect from HTTPS to HTTP excluding /forms" enabled="true" stopProcessing="true"> <match url=".*" /> <conditions> <add input="{URL}" p

我需要一个正则表达式,它将匹配除特定路径之外的所有https URL

e、 g

匹配

不匹配 *

这就是我到目前为止所做的:

<rule name="Redirect from HTTPS to HTTP excluding /forms" enabled="true" stopProcessing="true">
    <match url=".*" />
    <conditions>
        <add input="{URL}" pattern="^https://[^/]+(/(?!(forms/|forms$)).*)?$" />
    </conditions>
    <action type="Redirect" url="http://{HTTP_HOST}/{R:0}" redirectType="Permanent" />
</rule>


但它不起作用

我想出了以下模式:
^https://[^/]+(/(?!form/| form$).*)?$

说明:

  • ^
    :匹配字符串的开头
  • https://
    :匹配
    https://
  • [^/]+
    :将除正斜杠以外的任何内容匹配一次或多次
  • :开始匹配组1
    • /
      :匹配
      /
    • (?!
      :负前瞻
      • form/
        :检查是否没有
        form/
      • |
        :或
      • 表单$
        :检查字符串末尾是否没有
        表单
    • :结束负前瞻
    • *
      :将所有内容匹配零次或多次
  • :结束匹配组1
  • :将上一个令牌设置为可选
  • $
    :匹配行尾

这是否给了你想要的行为

https?://[^/]+($|/(?!表单)/?*$)


www.domain.com
位之后,它正在查找字符串的结尾,或者是斜杠,然后是非
表单的内容
我在发布的模式中看到两个问题
http://[^/]+($|/(!表单)/?*$)

  • 它错过了重定向URL,例如
    https://domain.com/forms_instructions
    ,因为模式也无法与这些模式匹配

  • 我相信您在模式和URL之间颠倒了http和https。模式应该有
    https
    和URL
    http

也许这会如您所愿:

 <rule name="Redirect from HTTPS to HTTP excluding /forms" enabled="true" stopProcessing="true">
        <match url="^https://[^/]+(/(?!(forms/|forms$)).*)?$" />
        <action type="Redirect" url="http://{HTTP_HOST}{R:1}" redirectType="Permanent" />
    </rule>


编辑:我已将模式移动到标记本身,因为将所有内容与。*匹配,然后使用附加条件似乎是不必要的。我还更改了重定向URL,以使用匹配中括号捕获的输入URL部分

重定向模块的工作方式,您只需使用:

<rule name="Redirect from HTTPS to HTTP excluding /forms" stopProcessing="true">
    <match url="^forms/?" negate="true" />
    <conditions>
        <add input="{HTTPS}" pattern="^ON$" />
    </conditions>
    <action type="Redirect" url="http://{HTTP_HOST}/{R:0}" />
</rule>

匹配的url已经被询问了数百次。但是,让我们忘记搜索副本,请告诉我们您使用的是什么口味?嗨,Hamza,我试图找到一个符合我要求的正则表达式,但没有找到。我正在使用IIS URL重写模块。规则是匹配所有的,除了,这是棘手的一点。如果你能帮忙的话,那就太好了,这会让我睡上几个小时。这让我很接近,但还不够接近到底什么应该阻止匹配,无效URL的规则是什么?我想捕获所有https流量并将其重定向到http,除非https URL是*在您的情况下似乎有错误,您的模式是“http?”而不是“https”。这可能就是问题所在吗?@Sniffer您在哪里以及如何测试它的?我使用Expresso进行了测试,并提供了不应该匹配的URL作为输入,但Expresso说它是有效的。@Sniffer在发布它之前,我也测试了它。嗯,这真的很奇怪,因为我测试了其他答案正则表达式,但它起作用了,但你的没有。@Burt Well simple,只需删除
:pThanks sundar,它似乎仍然不起作用,我认为它非常接近,只是不确定为什么它不会拾取我域的根()并将其重定向到httpequivalent@Burt你是说它适用于根域以外的所有页面吗?如果是这样的话,我会感到惊讶,因为如果我理解正确,前面重定向URL中的{R:0}应该会把事情搞砸。我更新了帖子,做了一些改动,请尝试这个版本。
<rule name="Redirect from HTTPS to HTTP excluding /forms" stopProcessing="true">
    <match url="^forms/?" negate="true" />
    <conditions>
        <add input="{HTTPS}" pattern="^ON$" />
        <add input="{HTTP_HOST}" pattern="^www.example.com$" />
    </conditions>
    <action type="Redirect" url="http://{HTTP_HOST}/{R:0}" />
</rule>