Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 带有正则表达式的Intelligencia UrlRewriter不工作_.net_Asp.net_Regex_Url Rewriting - Fatal编程技术网

.net 带有正则表达式的Intelligencia UrlRewriter不工作

.net 带有正则表达式的Intelligencia UrlRewriter不工作,.net,asp.net,regex,url-rewriting,.net,Asp.net,Regex,Url Rewriting,我有以下重写规则: <rewrite url="^/Membership/(.+)/(.+)/(.+)/(.+)" to="/Membership/Index.aspx?parentf=$3&amp;f=$4"/> 但是,在这个重写的URL映射到(/Membership/Index.aspx)的我的页面中,我正在检索文件名(“我的查询字符串中的f”)和父文件名(“我的查询字符串中的父文件”),以便在查询中使用以获取当前页面信息 在本例中,FileName的值是子组,Mo

我有以下重写规则:

<rewrite url="^/Membership/(.+)/(.+)/(.+)/(.+)" to="/Membership/Index.aspx?parentf=$3&amp;f=$4"/>

但是,在这个重写的URL映射到(/Membership/Index.aspx)的我的页面中,我正在检索
文件名
(“我的查询字符串中的f”)和
父文件名
(“我的查询字符串中的父文件”),以便在查询中使用以获取当前页面信息

  • 在本例中,
    FileName
    的值是
    子组,Motorcycle-Live.aspx
    (当时我希望它只是
    Motorcycle-Live.aspx
  • 在这种情况下,“ParentFileName”的值是
    成员组
    (当我希望它是“子组”时)

我还有一些其他较低级别的重写规则,例如:

<rewrite url="^/Membership/(.+)" to="/Membership/Index.aspx?f=$1"/>
<rewrite url="^/Membership/(.+)/(.+)" to="/Membership/Index.aspx?parentf=$1&amp;f=$2"/>
<rewrite url="^/Membership/(.+)/(.+)/(.+)" to="/Membership/Index.aspx?parentf=$2&amp;f=$3"/>
在这些情况下,
FileName
ParentFileName
值按预期生成。只有在这个“第五级”页面上,我才有问题

我做错了什么


编辑

删除my web.config中除此之外的所有重写规则后:

<rewrite url="^/Membership/(.+)/(.+)/(.+)/(.+)" to="/Membership/Index.aspx?parentf=$3&amp;f=$4"/>
<rewrite url="^/Membership/(.+)/(.+)/(.+)/(.+)" to="/Membership/Index.aspx?parentf=$3&amp;f=$4"/>

我发现它能自己工作。然后我试着把它们一个接一个地加回去,然后改变顺序,直到成功。我最终发现以下规则顺序是有效的:

<rewrite url="^/Membership/(.+)" to="/Membership/Index.aspx?f=$1"/>
<rewrite url="^/Membership/(.+)/(.+)/(.+)/(.+)" to="/Membership/Index.aspx?parentf=$3&amp;f=$4"/>
<rewrite url="^/Membership/(.+)/(.+)/(.+)" to="/Membership/Index.aspx?parentf=$2&amp;f=$3"/>
<rewrite url="^/Membership/(.+)/(.+)" to="/Membership/Index.aspx?parentf=$1&amp;f=$2"/>
<rewrite url="^/Membership/(.+)" to="/Membership/Index.aspx?f=$1"/>
<rewrite url="^/Membership/(.+)/(.+)/(.+)/(.+)" to="/Membership/Index.aspx?parentf=$3&amp;f=$4"/>
<rewrite url="^/Membership/(.+)/(.+)/(.+)" to="/Membership/Index.aspx?parentf=$2&amp;f=$3"/>


因此,只需颠倒顺序,但我将第一条规则保持在相同的位置。

重新安排规则:使用如此广泛的模式
(.+)
您应该从最长到较短开始:

<rewrite url="^/Membership/(.+)/(.+)/(.+)/(.+)" to="/Membership/Index.aspx?parentf=$3&amp;f=$4"/>
<rewrite url="^/Membership/(.+)/(.+)/(.+)" to="/Membership/Index.aspx?parentf=$2&amp;f=$3"/>
<rewrite url="^/Membership/(.+)/(.+)" to="/Membership/Index.aspx?parentf=$1&amp;f=$2"/>
<rewrite url="^/Membership/(.+)" to="/Membership/Index.aspx?f=$1"/>

如果您当前的顺序中有规则(“先短”的顺序),则永远不会计算“长”的规则。

请尝试以下操作,而不是所有已发布的规则:

<rewrite url="^/Membership/([^/]+)$" to="/Membership/Index.aspx?f=$1"/>
<rewrite url="^/Membership/([^/]+/)*([^/]+)/([^/]+)$" to="/Membership/Index.aspx?parentf=$2&amp;f=$3"/>


这应该避免规则的模糊性,并具有任意路径深度的一般规则。

替代解决方案

删除my web.config中除此之外的所有重写规则后:

<rewrite url="^/Membership/(.+)/(.+)/(.+)/(.+)" to="/Membership/Index.aspx?parentf=$3&amp;f=$4"/>
<rewrite url="^/Membership/(.+)/(.+)/(.+)/(.+)" to="/Membership/Index.aspx?parentf=$3&amp;f=$4"/>

我发现它能自己工作。然后我试着把它们一个接一个地加回去,然后改变顺序,直到成功。我最终发现以下规则顺序是有效的:

<rewrite url="^/Membership/(.+)" to="/Membership/Index.aspx?f=$1"/>
<rewrite url="^/Membership/(.+)/(.+)/(.+)/(.+)" to="/Membership/Index.aspx?parentf=$3&amp;f=$4"/>
<rewrite url="^/Membership/(.+)/(.+)/(.+)" to="/Membership/Index.aspx?parentf=$2&amp;f=$3"/>
<rewrite url="^/Membership/(.+)/(.+)" to="/Membership/Index.aspx?parentf=$1&amp;f=$2"/>
<rewrite url="^/Membership/(.+)" to="/Membership/Index.aspx?f=$1"/>
<rewrite url="^/Membership/(.+)/(.+)/(.+)/(.+)" to="/Membership/Index.aspx?parentf=$3&amp;f=$4"/>
<rewrite url="^/Membership/(.+)/(.+)/(.+)" to="/Membership/Index.aspx?parentf=$2&amp;f=$3"/>


因此,只需颠倒顺序,但我将第一条规则保持在相同的位置。

如果使用
^/Membership/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)
?@Qtax,你会得到什么?谢谢,我有可能会试试@QTax不,刚刚尝试过,结果也一样,这可能是你的另一个重写规则弄乱了它。你自己在测试重写吗?您应该这样做,或者您可以尝试将所有其他
更改为
[^/]
,并在所有规则的末尾添加一个
$
。(虽然奇怪的是你得到了一个
/
的地方,所以可能是其他的东西。)@Qtax对了,我刚刚尝试删除了除此之外的所有规则,而且效果很好。所以,是的,这一定与其他规则有关。只是不知道是哪一个!我已经尝试过改变顺序,但这似乎只是造成了另一个问题!我试过你的建议。我已经重新排列了顺序,但是我得到了'Index.aspx?parentf=Sub-Groups,Motorcycle-Live.aspx'作为文件名,而ParentFileName没有任何内容。此外,正如您在上面对@Qtax的评论中所注意到的,我已经尝试将“.”字符交换到“[^/]”,但这没有任何区别@Leah我在regex测试工具上尝试了该模式,并使用IIS URL重写模块实现了该模式——它工作正常——我在发布之前对其进行了测试。当与此URL匹配时,此模式不可能产生这样的结果。只有当另一条规则处理它时,才有可能。我强烈建议重新启动您的应用程序/IIS/服务器或检查您的其他规则。我的回答描述了原因,对此我100%肯定。谢谢你的帮助。可能是因为它运行在我的本地机器上,而不是使用IIS。重写规则直接添加到my web.config中,而不是使用服务器的URL重写模块。然而,当这个网站上线时,我将通过服务器上的IIS URL重写模块重新添加规则,因为我被告知Intelligencia UrlRewriter不能与IIS7一起工作。所以当它上线的时候可能会好起来。但即使是这样,为什么它不能在我的本地机器上工作呢?@Leah不幸的是,我不能对Intelligencia URLRewiter发表评论——以前从未听说过它。在任何情况下——这些规则都必须重写才能被IIS URL重写模块使用。你有哪些操作系统?如果是Windows Vista或Windows 7,那么您可以轻松地在PC上安装IIS v7并从那里运行。你试过重新启动吗?太好了,谢谢!我正要回来发布我找到的解决方案,但你的更好!我仍然会编辑我的问题上面与我的选择,但我会用你的。谢谢,不客气。如果你有另一个解决方案,你也可以把它作为另一个答案贴在这里,也许它甚至会得到一些选票。:-)