如何使用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
这是我在需要重写以伪造子域概念时发现的一个例子。以下代码通常位于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 interface
和HttpContent.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);
}
}
}
}