[英]Expression too complex for IIS Url rewrite in windows server 2019
我有一个规则在 IIS 8.5 中运行良好,包含在 Windows Server 2012 R2 中,但在 IIS 10.0 Windows server 2019 中给我一个错误:
HTTP 错误 500 表达式...无法匹配,因为它太复杂了。
简而言之,该规则捕获了 url 的 6 个参数,每个参数都是可选的,可以是任意值(只能是字母和数字,例如:
http://www.example.com/aaa1/bbb2/ccc3/ddd4/eee5/fff6
重写:
但是如果我有 1-5 个参数缺少规则必须再次匹配,则只有第一个参数 /aaa1 是必需的。
这是规则:
<rule name="Url_Rwr" enabled="true">
<match url="([_0-9a-zA-Z-]+)\/?([_0-9a-zA-Z-]*)\/?([_0-9a-zA-Z-]*)\/?([_0-9a-zA-Z-]*)\/?([_0-9a-zA-Z-]*)\/?([_0-9a-zA-Z-]*)" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{HTTP_HOST}" pattern="^(www.)?([^/]+)" />
</conditions>
<action type="Rewrite" url="/{C:2}/Prj/{R:1}.asp?gsPar001={R:1}&gsPar002={R:2}&gsPar003={R:3}&gsPar004={R:4}&gsPar005={R:5}&gsPar006={R:6}" />
</rule>
只是为了知识,如果我写一个较短的规则它可以正常工作:
<rule name="Url_Rwr_3PAR" enabled="true" stopProcessing="true">
<match url="^([_0-9a-zA-Z-]+)\/?([_0-9a-zA-Z-]*)\/?([_0-9a-zA-Z-]*)" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{HTTP_HOST}" pattern="^(www.)?([^/]+)" />
</conditions>
<action type="Rewrite" url="/{C:2}/Prj/{R:1}.asp?gsPar001={R:1}&gsPar002={R:2}&gsPar003={R:3}" />
</rule>
有什么建议吗? 这是一个错误吗?
更新:我发现了关于这个问题的更具体的事情。
如果我有一个简单的 url 规则运行良好,没有错误,例如: http://www.example.com/aaa1/bbb2/ccc3/ddd4/eee5/fff6
如果我有更复杂的 url 像这样: http://www.example.com/print-preview/4113405466783653653534728581189576/sismabonus-110-and-change-of-destination-of-use
给出错误 500.50 表达式“([_0-9a-zA-Z-]+)/?([_0-9a-zA-Z-] )/?([_0-9a-zA-Z-] )/?( [_0-9a-zA-Z-] )/?([_0-9a-zA-Z-] )/?([_0-9a-zA-Z-]*)" 匹配失败,因为它太复杂了
所以与参数的数量和长度有关。
您必须创建两个规则,一个是处理 3 个文件夹,另一个是处理 6 个文件夹路径。
<rule name="Url_Rwr3" enabled="true" stopProcessing="true">
<match url="^([^/]+)/([^/]+)/([^/]+)/?$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{HTTP_HOST}" pattern="^(www.)?([^/]+)" />
</conditions>
<action type="Rewrite" url="/{C:2}/Prj/{R:1}.asp?gsPar001={R:1}&gsPar002={R:2}&gsPar003={R:3}" appendQueryString="true" logRewrittenUrl="true" />
</rule>
<rule name="Url_Rwr6" enabled="true" stopProcessing="true">
<match url="^([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/?$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{HTTP_HOST}" pattern="^(www.)?([^/]+)" />
</conditions>
<action type="Rewrite" url="/{C:2}/Prj/{R:1}.asp?gsPar001={R:1}&amp;gsPar002={R:2}&amp;gsPar003={R:3}&amp;gsPar004={R:4}&amp;gsPar005={R:5}&amp;gsPar006={R:6}" appendQueryString="true" logRewrittenUrl="true" />
</rule>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.