从正则表达式读取捕获组,这也是URL重写规则?可能的



给定如下URL重写规则:

 <rule name="RewriteUserFriendlyThings" stopProcessing="true">
        <match url="^cat/sub-cat/(d+)/([^/]+)/?$" />
        <conditions>
          <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
          <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
        </conditions>
        <action type="Rewrite" url="cat/sub-cat/detail.aspx?id={R:2}" />
      </rule>

在c#代码中,我需要为我的书签按钮(不要问)读取模式的第二组(这是我的ID)中的值,以处理像这样动态的页面。我使用的CMS在发布时做的事情,我们错过了书签动态内容。

我所做的就是加载网页。配置为XML,并根据match元素的url属性中的内容匹配当前URL。然而,我不知道如何进入小组。请记住,这需要是通用的,所以在另一条规则中,组可以是第三组或第一组。

我有一个白名单,上面列出了我做这件事所违反的规则。

我尝试使用捕获组(?<id>d+),但网络。

我解决这个问题的方法是使用IIS 7 URL重写模块的服务器变量功能。

我定义了一个新的允许的服务器变量,然后使用IIS URL重写语法{R:2}捕获我需要的值。然后我可以使用HttpContext.Request.ServerVariables集合访问该值。

使用命名组的想法似乎是解决规则灵活性的合理的好方法。我目前无法在IIS上测试重写规则,但您可能想尝试使用另一种方法来命名捕获的组。也许会通过的。

试试这个替代模式,它使用单引号代替尖括号:

(?'id'd+)

最新更新