生成html静态页的好处有三点;一是减少服务器对数据响应的负荷,二是加载不用调动数据库,响应速度快。三是便于化化引擎。 缺点也有三点:一是维护不方便,每次都要手动生成。三是空间占用比较大。三是生成的文件多了,服务器对html文件的响应负担也较重。
url重写的好处:一,可以方便的实现对化化引擎的优化,并且比生成静态更加方便。二、占空间比较小。三、首页每天都自动变化,不用维护。网站首页一般都有热点排行之类的,你可以设为,24小时排行,一周排行,再加上最新文章,最新点评等。这样首页天天是有变化的。四,便于广告的轮显。比如:你可以把art1234.aspx,这个虚成n个页,如art_1234.aspx,news_1234.aspx,top_1234.aspx,在不同的页面放不同的广告.总之是动态的,你就可以随意动。(最强的是我以前的一个站,每晚8:00自动进入作弊的页面,早 网站制作6:00又换回来。作弊的页面就是强制点击,白天看一下占显比,让其在合理的范围,这样半年的时间.....不加说这个话题了。作弊是不对的,但那个联盟的名字我要是说出来,大家会很解气)。
url重写的缺点:我看只有一个,那就是效率不如生成html的,因为它不是真正意义上的静态页,每次请求是要读取数据库的。但你可以用缓存技术来补偿一下。asp.net下有三种缓存,数据的,片断的,页面的 ,广告页都作成用户控件加片断缓存,这样可以有效的防广告挂的问题。
有了简洁的URLs,搜索引擎就能区别各层文件夹的名称并根据关键字安置相应的链接。查询字符串参数会妨碍搜索引擎把站点遍入索引。很多SEO专业人员认为互联网蜘蛛并不欣赏动态URLs,在它们看来静态的URLs,可读性更强。
其二,改写URL对访问者来说能增加它的可用性,对网络管理员来说能更好的维护。且简洁的URLs更为好记,一个经常在网上冲浪的人很难记住充满参数的URL,要想让他们一字不漏的输入整个URL就更不可能了。
简洁的URLs能够帮你营造一个更为直观的网站,方便访问者查找他们需要的信息。网络管理员会发现维护静态的URLs要比维护动态的URLs简单的多。静态URLs更为抽象,很难找到切口,动态的URLs更容易识破,黑客能检测到你所用的服务器方的技术,并以此进行攻击。在静态URLS中,并没有显示服务器专有文件的扩展名,如 .asp、.cf、.cgi 和 .jsp,这会使你更容易的更改服务器方的技术,所以这种URLs显得十分的必要。
同样的,由于动态URLs的长度较长,网络管理员进行维护时难免会出错,从而导致链接中断。使用静态URLs时,如果改变一个网站的编程语言(如从Perl到Java),网站上的网页链接仍然有效。
改写URL
如今,没有进行搜索引擎优化的网站,不会有太多机会被搜索引擎蜘蛛编入索引,这是众所周知的事实,这类网站在搜索引擎结果网面里的排名一定不高。最终导致的结果是:转化率不高。
避免这种情况非常容易,你只需要为此URL做一些“清理”操作。其中,改写URL相当困难且又费时,但从长远来看,非常有效!
减号 vs.下划线
对于这一问题,大家都有不同的想法。URLs使用下划线的网站已经越来越少。有些人说,仍然使用下划线的人已经是“老古董”了,如今减号占了上风。
减号更为流行,是因为我们可以区分哪些是与可用性相关的因素,消除了一些不必要的混淆。若URL使用下划线,访问者会误认为是链接或打印此URL等。 除此之外,使用减号还能使收入在搜索引擎网面里的网站所包含的关键字成倍增加。
举例来说:只有当用户搜索seo_技巧(实际上很少出现这类搜索)时,搜索引擎才会直接显示包含“seo_技巧”的URL;然而搜索“seo”、“技巧”或“seo技巧”时,包含了“seo-技巧”的URL就会出现在搜索引擎结果网面上。这一小小的图形标志可以给你带来意想不到的好处,大大提高了你网站的知名度。
与其它你可能会使用的工具相比,URL的重写确实是不错的方法。但你要记得,URLs的重写只是为了增强站点网址的可读性,并不能改变网站内部不好的设计。所以,不要期待会有奇迹出现!不管怎样,当你决定改开始重写URLs时,确保:
· URLs尽可能短些 (加强可读性),
· 使用减号而不是下划线(给自己更多的机会,在搜索引擎结果网面里获更高的排名),
· 使用小写字母而不是大写的(这是为了避免敏感情况),
· 避免泄露你任何一个URL中所使用的服务器方技术(这是为了防止黑客的攻击)。
一 什么是url重写
URL 重写是截取传入 Web 请求并自动将请求重定向到其他 URL 的过程。比如浏览器发来请求 hostname/101.aspx ,服务器自动将这个请求中定向为http://hostname/list.aspx ?id=101。
url重写的优点在于:
l 缩短url,隐藏实际路径提高安全性
l 易于用户记忆和键入。
l 易于被搜索引擎收录
二 实现url重写的基本方法
1. 下载ms的URLRewriter.dll,放到你的web程序的bin下
下载地址http://download.microsoft.com/download/0/4/6/0463611e-a3f9-490d-a08c-877a83b797cf/MSDNURLRewriting.msi
下载完成后,在web.config里设置如下:
<?xml version="1.0" encoding="utf-8" ?>
<!--overred-->
<configuration>
<configSections>
<section name="RewriterConfig"
type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
</configSections>
<RewriterConfig>
<Rules>
<RewriterRule>
<LookFor>~/d(/d+)/.aspx</LookFor>
<SendTo>~/default.aspx?id=$1</SendTo>
</RewriterRule>
</Rules>
</RewriterConfig>
<system.web>
<httpHandlers>
<add verb="*" path="*.aspx" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
</httpHandlers>
<httpModules>
<add type="URLRewriter.ModuleRewriter, URLRewriter" name="ModuleRewriter" />
</httpModules>
其中
<section name="RewriterConfig"
type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
</configSections>
用于指定配置节"RewriterConfig"的处理程序类的名称为”URLRewriter.Config.RewriterConfigSerializerSectionHandler”,该类存在于bin目录下的URLRewriter .dll文件中
配置节"RewriterConfig"内容如下
<RewriterConfig>
<Rules>
<RewriterRule>
<LookFor>~/d(/d+)/.aspx</LookFor>
<SendTo>~/default.aspx?id=$1</SendTo>
</RewriterRule>
</Rules>
</RewriterConfig>
其中关键的是这两句
<LookFor>~/d(/d+)/.aspx</LookFor>
<SendTo>~/default.aspx?id=$1</SendTo>
<LookFor>~/d(/d+)/.aspx</LookFor>表示,用户输入的url,d(/d+)/.aspx是url中文件名匹配的正则表达式(此处为字母d开头,后面跟一个或多个数字,并以.aspx结尾。用户也可根据自己的需要自行设定)。
<SendTo>~/default.aspx?id=$1</SendTo>,表示当服务器接收到符合上面条件的请求后如何重写url。此处表示访问defalutl.aspx并传入参数id,其值$1将用用户请求的文件名中的第一个数字来表示。
例如用户输入 hostname/d11.aspx,服务器会把他重写为http://hostname/default.aspx?id=11。换句话说用户输入http://hostname/d11.aspx,实际访问的是http://hostname/default.aspx?id=11。这样就起到了隐藏真实文件名,并便于用户记忆的作用。
2.处理回发
在重写后的url里如果产生回发,例如有一个按钮,又调用了该被重写的aspx,用户浏览器中将会显示该aspx文件实际的地址,也就是http://hostname/default.aspx?id=11。但从用户的角度考虑,如 果单击按钮时突然看到 URL 更改会使他们感到不安。因此必须解决这个问题。
解决方法有二:
(1)自己定义一个Actionlessform类,在aspx中不再使用系统提供的form 标记
namespace ActionlessForm {
public class Form : System.Web.UI.HtmlControls.HtmlForm
{protected override void RenderAttributes(HtmlTextWriter writer)
{
writer.WriteAttribute("name", this.Name);
base.Attributes.Remove("name");
writer.WriteAttribute("method", this.Method);
base.Attributes.Remove("method");
this.Attributes.Render(writer);
base.Attributes.Remove("action");
if (base.ID != null)
writer.WriteAttribute("id", base.ClientID);
}}}
创建此类并对其进行编译之后,要在 ASP.NET Web 应用程序中使用它,应首先将其添加到 Web 应用程序的 References 文件夹中。然后,要 使用它来代替 HtmlForm 类,做法是在 ASP.NET 网页的顶部添加以下内容:
<%@ Register TagPrefix="skm" Namespace="ActionlessForm"
Assembly="ActionlessForm" %>
然后,将 <form runat="server">(如果有)替换为:
<skm:Form id="Form1" method="post" runat="server">
并将右边的 </form> 标记替换为:
</skm:Form>
(2)以上的是继承个form,第二种方法就是继承page,这样你不需要在aspx页中改任何东西。
代码:
using System;
using System.IO;
using System.Web;
using System.Web.UI;
namespace URL
{
public class OLPage : Page
{
public OLPage()
{}
protected override void Render(HtmlTextWriter writer)
{
if (writer is System.Web.UI.Html32TextWriter)
{
writer = new FormFixerHtml32TextWriter(writer.InnerWriter);
}
else
{
writer = new FormFixerHtmlTextWriter(writer.InnerWriter);
}
base.Render(writer);
}}
internal class FormFixerHtml32TextWriter : System.Web.UI.Html32TextWriter
{
private string _url; // 假的URL
internal FormFixerHtml32TextWriter(TextWriter writer):base(writer)
{
_url = HttpContext.Current.Request.RawUrl;
}
public override void WriteAttribute(string name, string value, bool encode)
{
if (_url != null && string.Compare(name, "action", true) == 0)
{
value = _url;
}
base.WriteAttribute(name, value, encode);
}
}
internal class FormFixerHtmlTextWriter : System.Web.UI.HtmlTextWriter
{
private string _url;
internal FormFixerHtmlTextWriter(TextWriter writer):base(writer)
{
_url = HttpContext.Current.Request.RawUrl;
}
public override void WriteAttribute(string name, string value, bool encode)
{
if (_url != null && string.Compare(name, "action", true) == 0)
{
value = _url;
}
base.WriteAttribute(name, value, encode);
}}}
把这个文件编译成dll,并在你的项目中引用它。
然后把项目中的所有aspx文件对应的cs文件中的继承page类的代码改写为继承OLPage。
例如
public class WebForm1:page
改写为
public class WebForm1:URL.OLPage