导航
  • 主页
  • .NET Framework
  • ASP
  • Web Services
  • .NET互联网桌面应用
  • VB
  • 图表区
  • 分析与设计
  • 组件/控件开发
  • AppLauncher
  • 问答

asp.net Url重写

ovenj 2010-03-08 04:08:30
RT

看到很多大型网站网页的后缀都是html的,想问下他们用的什么技术?是url重写吗?

对于asp.net的网站看到用URLRewriter.dll这个能实现,但是做了个例子,感觉不是很方便,或者是不会用。

如何将整个网站的aspx后缀页面都全部改写成html的?

还有重写后用aspx和html都能访问的到网页,那网页中的一个链接怎么搞,是写成<a href="dddd.aspx">kk</a>还是<a href="dddd.html">kk</a>
???
...全文
5374 点赞 收藏 20
写回复
20 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Wilson_Zhong 2010-09-29
阐述得很清楚,可以结贴了
回复
sololie 2010-09-18
没准都是用MVC的吧,asp.net MVC也快到3.0了
回复
uniquesoso 2010-05-24
强呀!
回复
stepday 2010-05-18
学习了,感谢高手!
回复
SC~~~~~~~~~~~~~~~~~`
回复
stning 2010-03-09
引用 6 楼 huangwenquan123 的回复:
应该是url重写
不然对都生成html对硬盘消耗太大
数据库的访问也是对硬盘的io。并不见得比生成html对硬盘消耗大。一般楼主这样的是伪静态,或者是静态。而静态。在访问速度上,是最快的。对搜索引擎的友好性也是最好的
回复
越过越咸 2010-03-08
[Qoo14][Qoo15][Yo16][Yo17][Qoo18][Zoo1]
回复
ovenj 2010-03-08
感谢楼上各位的回答。

感觉读写html文件不是一种好的方法,还是重写要好操作点。

<!--这个是把http://localhost:2001/article.aspx?id=1 生成http://localhost:2001/1/a.html 这种页面 -->
<RewriterRule>
<LookFor>~/(\d{0,5})/a\.html </LookFor>
<SendTo>~/article.aspx?id=$1 </SendTo>
</RewriterRule>
这种配置链接岂不是很麻烦?要写好多的配置信息,有没有什么通配符可以替换所有aspx后缀的方法,例如:
*.html自动转化成为*.aspx

还有,例如我网站有一个菜单栏,是“首页”,“文章”等等,那么首页的链接是不是要写成<a href='default.html'>首页</a>呀???

看到很多网站完全没有aspx页面(用asp。net做的)?奇怪
回复
wuyq11 2010-03-08
<LookFor>~/news/([\w]+).html$ </LookFor>
<SendTo>~/Show.aspx?Title=$1 </SendTo>
全站静态化
http://topic.csdn.net/u/20090223/13/735acd20-a758-4ac6-bbb8-c5a9e11a51b5.html
回复
justwannaloveni 2010-03-08
asp.net中如何进行url重写,今天研究了一天这个问题
想实现诸如:http://www.51cto.com/2008/2/2
http://www.51cto.com/default.html
等这种url
当然,程序直接生成静态页面可以实现的
但是那样要生成很多这种页面以及文件夹
而且在数据量大的情况下生成是很浪费时间的
在这种情况下就要实现url重写了,当然就很多种方法
下面介绍的是微软的URLRewriter方法

1.首先下载URLRewriter.dll,下载之后直接复制到你的网站的bin目录中
2.配置你的web.config文件
在<configuration>节点下加
<configSections>
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
</configSections>

<RewriterConfig>
<Rules>
<!--一下三个是我自己写的测试的,当然你可以写很多个 -->
<!--这个是把http://localhost:2001/default.aspx?id=1 生成http://localhost:2001/d1.aspx 这种页面 -->
<RewriterRule>
<LookFor>~/d(\d{0,5})\.aspx</LookFor>
<SendTo>~/default.aspx?ID=$1</SendTo>
</RewriterRule>
<!--这个是把http://localhost:2001/article.aspx?id=1 生成http://localhost:2001/1/a.html 这种页面 -->
<RewriterRule>
<LookFor>~/(\d{0,5})/a\.html</LookFor>
<SendTo>~/article.aspx?id=$1</SendTo>
</RewriterRule>
<!--这个是把http://localhost:2001/test.aspx?id=1 生成http://localhost:2001/1/ 这种页面 -->
<RewriterRule>
<LookFor>~/(\d{0,5})/</LookFor>
<SendTo>~/test.aspx?id=$1</SendTo>
</RewriterRule>

</Rules>

</RewriterConfig>

同时还要在<system.web>配置节下加
<httpHandlers>
<add verb="*" path="*.aspx" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
<add verb="*" path="*.html" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
<add verb="*" path="*" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />

</httpHandlers>

3.好了,基本上就可以了,但是还有重要一点千万不要忘了
以上有三种情况的url生成
针对第一种情况,第一第二步配置完就可以实现了
可对第二种和第三种url情况,还需要进行一下配置
先说第二种情况:因为咱们重写的是.html后缀
所以需要在iis中进行.html映射,方法如下:
右击站点-属性-主目录-配置
在打开页面找扩展名.aspx,双击之后弹出窗口内复制可执行文件
一般是C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll
复制完之后点添加在弹出窗口把内容复制到可执行文件
扩展名.html当然这个你可以任意写了,不过要和
<add verb="*" path="*.html" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
保持一致.
同时去掉确认文件是否存在,确定即可
完成之后输入http://localhost:2001/1/a.html
是不是就可以访问了?爽吧

下面介绍第三种情况,生成目录
这里面稍微有点复杂,同样配置iis
还是在那个弹出窗口,点插入
把复制的文件即C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll
复制到可执行文件框内,同时去掉确认文件是否存在,确定即可
这样输入http://localhost:2001/1/,是不是就可以访问了?嘿嘿
可能读者会有疑问了:现在设置的这个和第二种设置的有什么区别?
现在设置的其实是进行*映射,即把所有的文件都进行url重写处理程序处理
这时其实就可以把.html 以及自带的.aspx等映射去掉,同样可以生成.html/.aspx/ url
好了,如果还想其他的扩展大家就尽情扩展吧。

4.现在再讲一下*映射要注意的问题
因为*映射是把所有的文件都要交给url称谢程序去处理,这样就会造成会把站点下的图片以及css
或者一些下载的rar等文件都要去处理,这样会慢吗?答案是毫无疑问的,肯定会增加内存的,
单单一网站的图片以及上传的图片就足以让程序减慢成倍的速度了。
那有什么办法进行处理吗?
当然,我们可以进行以下处理就可以把速度还原了:
方法1,把存放图片所在的文件夹转化成一个虚拟目录,在然后移处该虚拟目录*.*的映射,这样一来他的url重写程序就不会去处理图片文件,当然存放别的不需要url重写程序的文件也要象图片文件夹做类似的处理。
虚拟目录设置办法:在iis站点右击目录点属性,目录-点创建
然后点配置,在弹出窗口内删除:通配符应用程序映射(执行顺序)下添加的*.*的映射即可。
方法2,把不需要*.*映射的文件夹设置新站点和原来的站点分开,这样在原来的站点访问的时候用
新站点的域名即可。比如把图片设置站点http://images.ziuziu.cn,这样在http://ziuziu.cn站点访问图片的时候就必须使用http://images.ziuziu.cn/名称.gif,这样就避免了所有问件处理。
以上两种方法即可提高不少速度了,当然第一种药方便的多。

5.最后处理回发的情况大家可以在网上搜下即可。

对于ASPX页面,我们在客户端查看代码时会发现,它自动为form加入了action,并且地址就是开头所说的原始页面地址。而对于ASPX页面,若当它的action为空时也就将回发到当前地址。这样我们就可以通过在客户端清除action的方法,来实现回发后继续保持有地址。

在页面中加入以下代码即可:
<script type="text/javascript">try{document.forms[0].action=""}catch(ex){}</script>
如果有form的页面,就把上面代码加入<form></form>中,如果是用户控件就直接加到页面里面即可
此种方法最简单最使用,已经过测试



环境:Microsoft .NET Framework SDK v1.1
OS:Windows Server 2003 中文版
ASP.Net生成静态HTML页
在Asp中实现的生成静态页用到的FileSystemObject对象!
在.Net中涉及此类操作的是System.IO
以下是程序代码 注:此代码非原创!参考别人代码
//生成HTML页
public static bool WriteFile(string strText,string strContent,string strAuthor)
{
string path = HttpContext.Current.Server.MapPath("/news/");
Encoding code = Encoding.GetEncoding("gb2312");
// 读取模板文件
string temp = HttpContext.Current.Server.MapPath("/news/text.html");
StreamReader sr=null;
StreamWriter sw=null;
string str="";
try
{
sr = new StreamReader(temp, code);
str = sr.ReadToEnd(); // 读取文件
}
catch(Exception exp)
{
HttpContext.Current.Response.Write(exp.Message);
HttpContext.Current.Response.End();
sr.Close();
}


string htmlfilename=DateTime.Now.ToString("yyyyMMddHHmmss")+".html";
// 替换内容
// 这时,模板文件已经读入到名称为str的变量中了
str =str.Replace("ShowArticle",strText); //模板页中的ShowArticle
str = str.Replace("biaoti",strText);
str = str.Replace("content",strContent);
str = str.Replace("author",strAuthor);
// 写文件
try
{
sw = new StreamWriter(path + htmlfilename , false, code);
sw.Write(str);
sw.Flush();
}
catch(Exception ex)
{
HttpContext.Current.Response.Write(ex.Message);
HttpContext.Current.Response.End();
}
finally
{
sw.Close();
}
return true;

此函数放在Conn.CS基类中了
在添加新闻的代码中引用 注:工程名为Hover

if(Hover.Conn.WriteFilethis.Title.Text.ToString),this.Content.Text.ToString),this.Author.Text.ToString)))
{
Response.Write("添加成功");
}
else
{
Response.Write("生成HTML出错!");
}
-------------------------------------------------------------------------
模板页Text.html代码
-------------------------------------------------------------------------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>ShowArticle</title>

<body>

biaoti
<br>
content<br>
author
</body>
</HTML>
回复
vip__888 2010-03-08
重写和生成html都可以实现
而且网上一大堆源码 下都下不完
回复
unling 2010-03-08
用url重写吧 微软自带的 可以设置格式正则表达式
回复
wennxxin 2010-03-08
这个你要下载好URLRewriter.dll这个东西,说明一下,这个东西,网上有好几个版本,不同的版本配置方法是不同的(也就是CS名称不同,实际功能是一样的),找一个教程,配置好(网上很多,搜索RUL重写)

如果写成HTML的后缀,还需要配置IIS

写成HTML一是为了客户容易记住自己的网站,二据说是有利于BAIDU的搜索爬虫收录,只是据说,呵呵

还有很多把某几个网页写成二级域名的,就是这样http:www.***.com/news或者http:www.***.com/product这样,层次很清晰,容易客户记住

链接当然要改了,比如你把网站的URL重写为news**.aspx或者news***.html,链接就要写news**.aspx或者news***.html,这样只要你输入了news**.aspx或者news***.html,它就会自动转到真正的URL地址,也就是news.aspx?id=***

个中细节还需要自己掌握··流程是这样的
回复
huangwenquan123 2010-03-08
应该是url重写
不然对都生成html对硬盘消耗太大
回复
龍月 2010-03-08
重写吧 百度一大堆。 需要改配置文件
回复
rainnight83 2010-03-08
用frame,iframe等都可以避免将真实URL隐藏起来
回复
ovenj 2010-03-08
是url重写,还是将aspx文件生成静态的html在发给客户端?有点麻烦吧
回复
ziyouren521125 2010-03-08
同样想听听楼下的建议。我也想知道
回复
发动态
发帖子
.NET技术社区
创建于2007-09-28

5.8w+

社区成员

.NET技术交流专区
申请成为版主
社区公告
暂无公告