Regex 正则表达式以匹配除特定路径之外的所有https URL
我需要一个正则表达式,它将匹配除特定路径之外的所有https URL e、 g 匹配 不匹配 * 这就是我到目前为止所做的: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
<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
和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部分 重定向模块的工作方式,您只需使用:
<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>