伪静态页 本帖最后由 freexiaoyu 于 2010-04-08 14:30:42 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 伪静态规则写在web.config里。引用两个DLL就行了。不用在IIS里配。这样能实现aspx的伪静态。想要实现html扩展名得在IIS配。可以用一些IISAPI 你说的是IIS7 还是IIS6 啊 下面介绍的是微软的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> 楼上的你那个配置是IIS6下面的吧,IIS7 不是这样的 IIS 配置里面 要加入HTML 静态页面后缀名的。。然后加载 静态转换的DLL IIS7 到没接触过。。 IIS6 我用过也配置过 www.bzzckj.com 这个就是我在II6下面配置的。现在空间是IIS7 不起作用了。 打开IIS7,点击网站,右边的快捷菜单找到处理程序映射,添加托管处理程序.试试看 IIS7 下面.net3.5测试成功 我的网站是2.0的还没有测试成功。 我的项目是vs2005做的用的是伪静态页 我的系统是win7 IIS7.5 发布网站后在IIS中伪静态页不能用。谁知道怎么配置 群豪孤胆,无奈与“EntLibFornum论坛4.0” 如何选择“switch 语句的代码段” 文字截取 刷新页面,状态栏不出进度条? 自定义日历控件到底怎么做? 如何将DataGrid和AspNetPager合并为一个控件 急:我只有那么多分了拜托! asp.net城市分站功能 ASP.NET制作验证码 web项目里解决方案管理器里的“引用”是干什么用的? 把页面生成图片格式 asp.net 主题
你说的是IIS7 还是IIS6 啊
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>
试试看