好吧 我先来解释解释
URL:全称 Universal Resource Locator 统一资源定位符 说的太官方了
说白了 就是就是我们上网的时候在地址栏里面输入的网址
那什么是URL重写 我先举一个例子 您就明白了
我们上网的时候是不是遇到过这样的情况 在地址栏里面是一串因为字母 而且这段因为字母没有任何的后缀
那么 这个页面就被URL重写了 您明白了么
再解释一下 :
URL重写 就是隐藏掉网站开发时所使用的语言
这样做我认为有以下两个好处 :
1. 有利于将来的SEO优化 (SEO为搜索引擎优化 这里不讨论)
在蜘蛛爬网站的时候 不会优先考虑带有问号(?)的页面
如果我们不使用URL重写 带上参数会是这样的 “Default.aspx?Id=1”
这样就带上了问号(?) 非常不利于SEO
于是 我们就要采用URL重写来重新添加参数 格式可以重写成这样"Default_1.aspx"
这样 就非常有利于SEO了。
2. 提高安全性
当使用asp.net开发网站时 网页的后缀名是.aspx 使用PHP开发时 后缀名是.PHP
这样有留下了安全隐患 当黑客知道了你是使用某种语言写的网站时 就会使用相对于的手段攻击
你的网站 (当然高级的黑客即使隐藏了 也能知道网站开发使用的语言) 我们最终也以重写成这样的
格式“Default_1”
上面介绍了URL重写 以及说明了URL重写的好处 具体怎么实现呢 表着急 我会慢慢介绍的.....
说道重写 就必须要说道请求管道 请求管道在我之前的文章就已经说过了 这里就不再介绍了
要实现重写 就要在请求管道的第一个事件中捕获发送过来的请求
然后再根据捕获的请求信息 发送传统的带有参数的请求
具体操作步骤如下:
1. 在项目中添加“全局应用程序类”
(注意 如果是网站应用程序 会包含两个文件 Global.asax和Global.asax.cs 在 Global.asax.cs中添加一下代码
public class Global : System.Web.HttpApplication
{
protected void Application_Start(object sender, EventArgs e)
{
}
protected void Session_Start(object sender, EventArgs e)
{
}
protected void Application_BeginRequest(object sender, EventArgs e)
{
}
protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
}
protected void Application_Error(object sender, EventArgs e)
{
}
protected void Session_End(object sender, EventArgs e)
{
}
protected void Application_End(object sender, EventArgs e)
{
}
}
如果是web站点 则需要手动添加Global.asax.cs类 默认会添加在App_Code文件夹下 手动添加以后 在刚刚添加的Global.asax中 头部添加一句话<%@ Application Codebehind="App_Code\Global.asax.cs" Inherits="Global" Language="C#" %>)
2. 你会看到这个方法 Application_BeginRequest(object sender, EventArgs e)
没错 要相信自己的眼睛 这就是请求管道的第一个事件 我们就是要在这个事件中完成URL重写
3. 在前台超链接的地方 我是这样写的 当然你可以随意写 只要带上你上传递的参数就可以了
<a href="Default2_1">测试</a>
4. 在Application_BeginRequest(object sender, EventArgs e)我是这样写的
protected void Application_BeginRequest(object sender, EventArgs e)
{
// 请求管道的第一个事件
// 使用正则表达式判断类型
string url = Request.AppRelativeCurrentExecutionFilePath;
// 判断是否匹配
Match match = Regex.Match(url, @"Default2_(\d+)");
if (match.Success)
{
string id = match.Groups[1].Value;
string newUrl = "Default2.aspx?id=" + id;
Context.RewritePath(newUrl);
}
}
大功告成!!! 这样 就完成了 传说中的URL重写 !!!!