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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式匹配除特定路径之外的所有https URL相关的知识,希望对你有一定的参考价值。

我需要一个匹配除特定路径之外的所有https网址的正则表达式。

EG

比赛

https://www.domain.com/blog https://www.domain.com

不符合

https://www.domain.com/forms/ *

这是我到目前为止:

<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>

但它不起作用

答案

重定向模块的工作方式,你应该简单地使用:

<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>

仅当请求为HTTPS且路径不是以forms/forms(使用negate="true"选项)开头时,规则才会触发重定向到HTTP。 您还可以为主机添加条件以匹配www.example.com,如下所示:

<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>
另一答案

这会给你你正在寻找的行为吗?

https?://[^/]+($|/(?!forms)/?.*$)

www.domain.com位之后,它正在寻找字符串的结尾,或斜线,然后是不是forms的东西。

另一答案

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

说明:

  • ^:匹配字符串的开头
  • https://:匹配https://
  • [^/]+:匹配除正斜线之外的任何东西一次或多次
  • (:开始匹配组1 /:匹配/ (?!:负向前瞻 form/:检查是否没有form/ |:或 form$:检查字符串末尾是否没有form ):结束否定前瞻 .*:匹配所有零次或多次
  • ):结束匹配组1
  • ?:使前一个令牌可选
  • $:匹配行尾
另一答案

我在发布的模式http://[^/]+($|/(?!forms)/?.*$)中看到了两个问题

  • 它错过了重定向网址,例如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部分。

以上是关于正则表达式匹配除特定路径之外的所有https URL的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式 - 如何匹配除特定模式之外的所有内容

正则表达式:匹配文本段落中除特定短语外的所有内容

正则表达式匹配除 5 之外的所有数字字符

正则表达式匹配除一个以外的所有网站

正则表达式:匹配除一个单词之外的所有内容[重复]

正则表达式,匹配除 \r \n 之外的所有内容作为普通字符