【发布时间】:2011-07-21 23:00:34
【问题描述】:
我有以下重写规则:
<rewrite url="^/Membership/(.+)/(.+)/(.+)/(.+)" to="/Membership/Index.aspx?parentf=$3&f=$4"/>
我期望它应该与此 URL 一起使用:
/Membership/Benefits/Member-Groups/Sub-Groups/Motorcycle-Live.aspx
但是,在这个重写的 URL 映射到 (/Membership/Index.aspx) 的页面中,我正在检索 FileName(我的查询字符串中的“f”)和 ParentFileName(我的查询字符串中的“parentf”)在查询中使用以获取当前页面信息。
- 在这种情况下,
FileName的值是Sub-Groups,Motorcycle-Live.aspx(当我期望它只是Motorcycle-Live.aspx) - 在这种情况下,“ParentFileName”的值是
Member-Groups(当我期望它是“子组”时)
我还有一些针对较低级别的其他重写规则,例如:
<rewrite url="^/Membership/(.+)" to="/Membership/Index.aspx?f=$1"/>
<rewrite url="^/Membership/(.+)/(.+)" to="/Membership/Index.aspx?parentf=$1&f=$2"/>
<rewrite url="^/Membership/(.+)/(.+)/(.+)" to="/Membership/Index.aspx?parentf=$2&f=$3"/>
它们将分别使用以下示例 URL:
/Membership/Benefits.aspx
/Membership/Benefits/Member-Groups.aspx
/Membership/Benefits/Member-Groups/Sub-Groups.aspx
在这些情况下,FileName 和 ParentFileName 值按预期生成。我只是在这个“第 5 级”页面上遇到了问题。
我做错了什么?
编辑
在我的 web.config 中删除除此之外的所有重写规则后:
<rewrite url="^/Membership/(.+)/(.+)/(.+)/(.+)" to="/Membership/Index.aspx?parentf=$3&f=$4"/>
我发现它可以自己工作。然后我尝试将它们一一添加并更改顺序直到它起作用。我终于发现以下规则顺序有效:
<rewrite url="^/Membership/(.+)" to="/Membership/Index.aspx?f=$1"/>
<rewrite url="^/Membership/(.+)/(.+)/(.+)/(.+)" to="/Membership/Index.aspx?parentf=$3&f=$4"/>
<rewrite url="^/Membership/(.+)/(.+)/(.+)" to="/Membership/Index.aspx?parentf=$2&f=$3"/>
<rewrite url="^/Membership/(.+)/(.+)" to="/Membership/Index.aspx?parentf=$1&f=$2"/>
所以只是颠倒顺序,除了我将第一条规则保持在相同的位置。
【问题讨论】:
-
如果你使用
^/Membership/([^/]+)/([^/]+)/([^/]+)/([^/]+)会得到什么? -
@Qtax 谢谢,有可能我会试试!
-
@QTax 没试过,结果一样
-
可能是你的其他重写规则之一。你自己测试这个重写吗?您应该这样做,或者您可以尝试将所有其他
.更改为[^/],并在所有规则的末尾添加$。 (尽管奇怪的是你得到了一个,而/是,所以可能是别的东西。) -
@Qtax 是的,我刚刚尝试删除除该规则之外的所有规则并且它有效。所以是的,它必须与其他规则之一有关。只是不确定是哪一个!我已经尝试过切换顺序,但这似乎又造成了另一个问题!
标签: .net asp.net regex url-rewriting