正则表达式:需要帮助重写url

时间:2009-11-28 09:13:14

标签: asp.net

我正在使用urlrewriter.net

我想要的网址就像/articles/3/name_of_article/articles.aspx

&安培; article是articles.aspx?article = 3;

(3只是采取,可以是任何数字)

我正在使用像这样的正则表达式

      <rewriter>
        <rewrite url="^/articles/(.+)/(.+)" to="/articles.aspx?article=$1" />
    </rewriter>

它不起作用,如果我从引用中删除模块dll,那么也没有例外 抛出。

1)如何确保加载模块(通过代码)?

2)我的正则表达式是否正确?

我的web.config包含:

<configSections>
        <section name="rewriter" requirePermission="false"
            type="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler,
             Intelligencia.UrlRewriter" />
</configSections>

&安培;

<httpModules>
        <add type="Intelligencia.UrlRewriter.RewriterHttpModule,
                  Intelligencia.UrlRewriter" name="UrlRewriter" />

       <add name="ScriptModule"
             type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    </httpModules>

2 个答案:

答案 0 :(得分:1)

2)我的正则表达式是正确的吗?

不,您应该将其更改为^/articles/([^/]+)/.+$,否则第一次捕获将吞噬“3 / name_of_article”而不仅仅是“3”,并且您不需要第二个捕获组。您也可以使用捕获组中的非贪婪匹配来编写它,例如^/articles/(.+?)/.+$

答案 1 :(得分:0)

这根本不回答你的问题,但是你可能想知道。我曾经使用过UrlRewriter和ISAPI_Rewrite,而ISAPI_Rewrite在我看来要好得多。

您不必在web.config中包含任何引用或重写规则。而是在IIS中将其作为ISAPI扩展安装,并且它具有自己的配置文件,并且您编写的规则几乎与Apache mod_rewrite模块相同,因此如果您熟悉该模块,那么这是另一个优势。

此外,由于它在传递给.NET框架之前在Web服务器级别执行,因此不需要将其绑定到ASP.NET请求生命周期。

你可以在这里查看。 ISAPI_Rewrite 3