URL重写
URL重写,实质上是将网页真实的URL隐藏起来,使用户通过相应的虚拟URL访问网页资源,以弥补真是URL的许多不足
好处:
1.满足搜索引擎需要,实现搜索引擎中的排名优化
很多搜索引擎不支持动态链接无法抓去动态网页,尤其是带“?”查询参数的网页,而且静态网页优先度高于动态网页
2.隐藏网页实现技术,增强网页安全性
如果网页上含jsp或aspx 制作网站的技术一目了然。但如果将页面重写 黑客将无法知晓网页技术,大大降低网页收到攻击的可能性
3.提高网站的可用性和专业性
太长的URL会给网站带来可用性问题
4.使用URL支持“可删减”的需求
很多搜索引擎不支持动态链接无法抓去动态网页,尤其是带“?”查询参数的网页,而且静态网页优先度高于动态网页
如果网页上含jsp或aspx 制作网站的技术一目了然。但如果将页面重写 黑客将无法知晓网页技术,大大降低网页收到攻击的可能性
使用HttpModule实现URL重写
代码实例
<div>
<a href="goods_1.html">1</a>
<a href="goods_2.html">2</a>
</div>
namespace ch3
{
public class GOODHT : IHttpModule
{
public void Dispose()
{
throw new NotImplementedException();
}
public void Init(HttpApplication context)
{
//请求处理之前触发的事件
context.BeginRequest += context_beginRequest;
}
void context_beginRequest(object sender,EventArgs e) {
HttpApplication app = sender as HttpApplication;
//获取请求的原始的URL
string url = app.Request.RawUrl;
//正则表达式:.../goods_1.html
Regex regex = new Regex(@"\w+_\d+\.html");
if (regex.IsMatch(url))
{
//如果符合格式,则需要进行URL重写
//截取URL中的编号
int line = url.LastIndexOf("_");
int dot = url.LastIndexOf(".");
string id = url.Substring(line + 1, dot - line - 1);
//拼接真实的URL
string dcURL = "Good.aspx?id=" + id;
//跳转 Server.Transfer
app.Server.Transfer(dcURL);
}
}
}
}
//节点配置
<system.webServer>
<modules>
<add name="url" type="ch3.GOODHT"/>
</modules>
</system.webServer>
使用URLRewriter.dll实现URL重写
只要在Web.config文件中添加URL重写规则
1.下载URLRewriter.dll下载地址 http://download.microsoft.com/download/0/4/6/0463611e-a3f9-490d-a08c-877a83b797cg/MSDNURLRewriting.nsu
2.在网站中添加引用URLRewriter.dll
3.在网站中添加页面
4.web.config文件中配置使用URLRewriter.dll
将configSections节点作为configuration的第一个子节点进行添加
用于指定配置节RewriterConfig的处理程序类的名称为URLRewriter.Config.Rewriter.ConfigSerializerSectionHandler
将所有扩展名为.html文件的HTPP请求映射到类 URLRewriter.RewriterFactoryHandler中添加规则
代码示例
<div>
<a href="goods_1_45.html">1</a>
</div>
节点配置
<!--dll重写URL 必须放低一个-->
<configSections>
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
</configSections>
<!--规则-->
<RewriterConfig>
<Rules>
<RewriterRule>
<LookFor>~/goods_(\d)+\.html</LookFor>
<SendTo>~/Good.aspx?id=$1</SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>~/goods_(\d)_(\d+)+\.html</LookFor>
<SendTo>~/Good.aspx?id=$1&id2=$2</SendTo>
</RewriterRule>
</Rules>
</RewriterConfig>
<system.webServer>
<handlers>
<add verb="*" path="*" type="URLRewriter.RewriterFactoryHandler, URLRewriter" name ="urlrewriter"/>
</handlers>
</system.webServer>
实现多个参数URL重写
多个参数用&间隔 (URL中连接多个参数&)取值为()里面的值
例如
<LookFor>~/goods_(\d)_(\d)+\.html</LookFor>
<SendTo>~/Good.aspx?id=$1&pwd=$2</SendTo>