正则表达式匹配除特定路径之外的所有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
和URLhttp
。
也许这会按你的意愿运作:
<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的主要内容,如果未能解决你的问题,请参考以下文章