IIS url重写正则表达式模式无法正常工作

时间:2014-08-26 19:20:00

标签: regex iis umbraco

我正在使用IIS 8.0和Umbraco 7.我正在尝试制作这样的网址:testdomain.com/somecategory?page=2看起来像testdomain.com/somecategory/page/2。我创建了一个重写规则,但它不起作用我总是得到HTTP错误500.52 - URL重写模块错误。

<rule name="pageNationRule" stopProcessing="true">
   <match url="(.+)/(page)/(\d+)(|/)$"/>
      <conditions logicalGrouping="MatchAny">
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
      </conditions>
   <action type="Rewrite" url="{R:1}?{R:2}={R:3}"/>
</rule>

任何帮助都将不胜感激。

提前致谢,

2 个答案:

答案 0 :(得分:1)

您必须在umbraco网站根目录的/ config文件夹中的 UrlRewrite.config 中设置这些规则。 要添加新规则:

<add name="produktidrewrite" 
    virtualUrl="^~/product/(.*).aspx" 
    rewriteUrlParameter="ExcludeFromClientQueryString" 
    destinationUrl="~/product.aspx?productid=$1" 
    ignoreCase="true" />

或者您可以在代码中添加自定义路线。 创建一个继承自 Umbraco.Core.ApplicationEventHandler 的新类 覆盖 ApplicationStarted 以添加规则。像这样:

protected override void ApplicationStarted(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
{
    //Custom route
    RouteTable.Routes.MapRoute(
    "SomeName",
    "Something/{action}/{id}",
    new
    {
        controller = "ControllerName",
        action = "Index",
        id = UrlParameter.Optional
    });
}

答案 1 :(得分:0)

错误可能是因为你在开场比赛标签中有一个额外/。 d&#39;哦

但是,要简化规则,您应该可以使用:

<rule name="pageNationRule" stopProcessing="true">
   <match url="(.+)/page/(\d+)/?$" ignoreCase="true">
   <action type="Rewrite" url="{R:1}?page={R:2}"/>
</rule>