现在的位置: 首页 > 综合 > 正文

URL重写 详解

2017年11月07日 ⁄ 综合 ⁄ 共 1988字 ⁄ 字号 评论关闭


好吧 我先来解释解释
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重写 !!!!


抱歉!评论已关闭.