如何使用ASP.NET 4.0 URL重写来重写URL

本文关键字:URL 重写 何使用 ASP NET | 更新日期: 2023-09-27 18:19:39

我有一个在ASP.NET 4.0中构建的应用程序。我需要使用Globax.asax文件中的url重写类或IIS 7或IIS 7.5 中的microsoft url重写扩展来重写url

示例。

我有一个动态构建的url,不幸的是我无法更改,因为它是第三方控制的。

http://sitename.com/store/description/product?table=page2

我需要把它重写成

http://sitename.com/store/description/product?id=2

如何使用ASP.NET 4.0 URL重写来重写URL

这是我在需要重写以伪造子域概念时发现的一个例子。以下代码通常位于web.config文件中,也可以通过IIS7管理工作室进行设置。

<system.webServer>
 <validation validateIntegratedModeConfiguration="false"/>
 <modules runAllManagedModulesForAllRequests="true"/>
  <rewrite>
   <rules>
     <clear />
    <!-- Ameritexintl Website Publisher -->
  <rule name="ameritexintl-Web-publisher" enabled="true" stopProcessing="true">
       <match url="(.*)" />
       <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
         <add input="{HTTP_HOST}" pattern="^www'.publisher'.ameritexintl'.com$" />
       </conditions>
       <action type="Redirect" url="http://publisher.ameritexintl.com/{R:0}" />
     </rule>
    <rule name="ameritexintl-Web-publisher-rewrite" enabled="true" stopProcessing="true">
       <match url="(.*)" />
       <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
         <add input="{HTTP_HOST}" pattern="^(www'.)?publisher'.ameritexintl'.com$" />
         <add input="{PATH_INFO}" pattern="^/publisher/($|/)" negate="true" />
       </conditions>
       <action type="Rewrite" url="/publisher/{R:0}" />
     </rule>
   </rules>
 </rewrite>
 <urlCompression doStaticCompression="true" doDynamicCompression="true" />

基本上,当请求的url通过IIS时,它会对路径进行模式匹配,并将其与网站的任何重写规则进行比较。如果url与模式匹配,IIS将重写url以与规则匹配,并使用新url推送请求。

我在几个网站上成功地使用了这个,这对我来说效果很好。

本例提供了一系列屏幕截图,显示在您浏览和设置url重写规则时IIS对话框的样子。

希望这对你有所帮助,祝你的项目好运。

试试这个:

string data = @"http://sitename.com/store/description/product?table=page2";
string pattern = @"(table)(?:=)([^'d]+)";
Console.WriteLine ( Regex.Replace(data, pattern, "id="));
// Result
// http://sitename.com/store/description/product?id=2

@Eugene,你喜欢使用IIS_ISAPI吗?如果是,你可以试试这个Ionics Isapi重写过滤器

如果没有,您可以使用这个url重写模块。Intelligencia.UrlRewriter

两者都不是,如果你想编写自己的代码,你需要实现httpModule interfaceHttpContent.RewritePath方法。

例如:

public sealed class RewriterHttpModule : IHttpModule
    {
    private static RewriterEngine _rewriter = new RewriterEngine();
    public void Dispose()
    {
    }
    public void Init(HttpApplication context)
    {
        context.BeginRequest += new EventHandler(BeginRequest);
    }
    private void BeginRequest(object sender, EventArgs e)
    {
       var context=((HttpApplication)sender).Context;
       string path = context.Request.Path;
       /*
         url rewrite list: 
          Dictionary<string,string>
       */
        Dictionary<string, string> urls = new Dictionary<string, string>();
        urls.Add(@"/store/description/product?table=page('d+)", "/store/description/product?id=$1");
        foreach (var pair in urls)
        {
            if (Regex.IsMatch(path, pair.Key))
            {
                var newUrl = Regex.Replace(path, pair.Key, pair.Value);
                //rewrite url
                context.RewritePath(newUrl, false);
            }
        }
    }
}