mvc可以直接配置路由,虽然aspx已经是过去式,但是学习一下也是有必要的。
1、直接在global.ashax中Application_BeginRequest方法中讲url重写
protected void Application_BeginRequest(object sender, EventArgs e) { var path = Request.AppRelativeCurrentExecutionFilePath; Regex regex = new Regex(@"~/default-(\d+)"); if (regex.IsMatch(path)) { var realPath = regex.Replace(path, @"~/default.aspx?a=$1"); Context.RewritePath(realPath); } }
2、写一个Module,然后在webconfig中配置启动。
public class URLRewriterModule : IHttpModule { public void Init(HttpApplication context) { context.BeginRequest += (s, e) => { HttpApplication app = s as HttpApplication; var path = app.Context.Request.AppRelativeCurrentExecutionFilePath; Regex regex = new Regex(@"~/default-(\d+)"); if (regex.IsMatch(path)) { var realPath = regex.Replace(path, @"~/default.aspx?a=$1"); app.Context.RewritePath(realPath); } }; } public void Dispose() { }
webconfig中system.webServer的节点下配置
<system.webServer> <!--设置不去校验过时配置--> <!--<validation validateIntegratedModeConfiguration="false"/>--> <modules> <!---namez自定义随便写,type写完整路径名称和网站程序集名称--> <add name="myurlrewriter" type="UrlRewriterForm.URLRewriterModule,UrlRewriterForm"/> </modules> <defaultDocument> <files> <!--<add value="index.aspx"/>--> </files> </defaultDocument> </system.webServer>
如果是老版本iis,是在system.web的节点配置
<httpModules> <!--老版本iis使用--> <add name="myurlrewriter" type="UrlRewriterForm.URLRewriterModule,UrlRewriterForm"/> </httpModules>
并且在system.webServer下配置
<!--设置不去校验过时配置--> <validation validateIntegratedModeConfiguration="false"/>
3、使用第三方的URLRewriter,可以用NuGet获取包,原理应该和2是一样的,只不过将url重写规则放在配置中,然后module中读取配置信息。安装完包之后webconfig中自动增加了一些信息:
<configSections> <section name="rewriter" requirePermission="false" type="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter" /> </configSections>
<httpModules> <add type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter" name="UrlRewriter" /> </httpModules>
system.webServer下面出现rewriter
<rewriter> <redirect url="~/Default.aspx" to="~/Default" /> <redirect url="~/Login.aspx" to="~/Login" /> </rewriter>
HTTP 错误 500.22 - Internal Server Error
检测到在集成的托管管道模式下不适用的 ASP.NET 设置。
将配置迁移到 system.webServer/modules 节。
如果您确信可以忽略此错误,则可以通过将 system.webServer/validation@validateIntegratedModeConfiguration 设置为 false 来禁用它。
<system.webServer> <!--设置不去校验过时配置--> <validation validateIntegratedModeConfiguration="false"/> <modules> <add type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter" name="UrlRewriter" /> </modules> <defaultDocument> <files> <!--<add value="index.aspx"/>--> </files> </defaultDocument> </system.webServer>
4、用第三方插件直接在iis服务器上修改。
isapi_rewrite
http://www.helicontech.com/isapi_rewrite/download.html
Free URL Rewriter
http://www.microsoft.com/web/spotlight/urlrewriter/