一、生成真靜態頁
protected void lbtnIndex_Click(object sender, EventArgs e)
{
string url = "http://"+Request.Url.Host+":"+Request.Url.Port+"/index.aspx";
Utility.Tool.GenHTMLFromURL(url, Server.MapPath("/index.html"), "");
Utility.Tool.Alert("生成成功",this.Page);
}
二、采用iframe方法生成靜態頁
1、把網頁中動態部分:如留言信息,用ifrme包括起來做成一個新頁面 replay.aspx
2、在head部分加上 //加在包括的頁面里 即 replay.aspx
<script language="javascript" type="text/javascript">
$(function() {
var h = $(document).height(); // 當前文檔的高度
h = parseInt(h);
var $frm = $(window.parent.document.getElementById("frmreplay"));
$frm.height(h);
})
function changeCode() {
var imgNode = document.getElementById("vimg");
imgNode.src = "handler/WaterMark.ashx?t=" + (new Date()).valueOf(); // 這里加個時間的參數是為了防止瀏覽器緩存的問題
}
</script>
3、在news_content.aspx中的動態部分拖入一個 <asp:Literal ID="litfrm" runat="server"></asp:Literal>
4、在cs中加上
litfrm.Text = "<iframe id='frmreplay' name='frmreplay' frameborder='no' src='replay.aspx?newsid=" + news.Id + "' style='border:none; width: 100%;' scrolling='no'></iframe>";
5、在網站后臺加一個按鈕,生成靜態頁
DataTable dt = nm.SelectAll(); //獲取所所有新聞 select * from news
foreach (DataRow row in dt.Rows)
{
string newsid = row["id"].ToString(); //取出所有新聞的id用于生成靜態頁
string url = "http://" + Request.Url.Host + ":" + Request.Url.Port + "/Web/newscontent.aspx?newsid=" + newsid;
Xiaobin.Utility.Tool.GenHTMLFromURL(url, Server.MapPath("~/" + newsid + ".html"), "");
}
6、修改前臺的指向<a href='<%#Eval("id") %>.html'><%#Eval("title")</a>
三、采用模版生成靜態頁
1、先使用第一種方法生成一個真靜態頁GenHTMLFromURL
2、在生成靜態頁的html文件中如: temp.html 中的所有需要從數據庫中獲取數據的變量改為 $id$、$title$、$body$、$visitnum$、$createdate$
3、和第二種方法一樣只是
DataTable dt = nm.SelectAll(); //獲取所所有新聞 select * from news
foreach (DataRow row in dt.Rows)
{
string newsid = row["id"].ToString();
string title = row["title"].ToString();
string body = row["content"].ToString();
string time = DateTime.Parse(row["createtime"].ToString()).ToString("yyyy-MM-dd HH:mm:ss");
Xiaobin.Utility.Tool.GenHTMLFromTemp(Server.MapPath("../static/temp.html"), Server.MapPath("../static/" + newsid + ".html"), new List<string> { "$title$", "$body$", "$time$", "$id$" }, new List<string> { title, body, time, newsid }, "");
}
四、采用UrlRewriter實現偽靜態
1、web層中引用Intelligencia.UrlRewriter.dll
2、修改web.config文件
<configSections>
<section name="rewriter" requirePermission="false" type="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter"/>
</configSections>
3、在system.web節點里
<httpModules>
<add type="Intelligencia.UrlRewriter.RewriterHttpModule,Intelligencia.UrlRewriter" name="UrlRewriter"/>
</httpModules>
4、正則表達式重寫url添加在system.web節點外面(上面)
<rewriter>
<rewrite url="news_content(\d+).html" to="news_content.aspx?id=$1" /> //url為重寫后的地址,to為原地址,$1代表第一個括號匹配的值
<rewrite url="aboutus(\d+)_(\d+).html" to="aboutus.aspx?id=$1&cabh=$2" /> //id=$1&cabh=$2 $1為第一個參數,$2為第二個參數
</rewriter>
5、修改前臺鏈接地址
如news.aspx頁面中的鏈接原為:
news_content.aspx?id=<%#Eval("id") %> 改為 news_content<%#Eval("id") %>.html
五、采用URLRewriter.dll實現偽靜態
1、web層中引用URLRewriter.dll
2、修改web.config文件、引用URLRewrite.dll偽靜態
在<configuration>節點中的<configSections>節點中加上
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
3、正則表達式重寫url添加在system.web節點上面
<RewriterConfig>
<Rules>
<RewriterRule>
<LookFor>~/news_body(\d+).html</LookFor> //LookFor生成的偽靜態 (\d+)為指向原路徑的第一個參數
<SendTo>~/news_body.aspx?id=$1</SendTo> //SendTo指向的原頁面 $1為第一個正則匹配參數
</RewriterRule>
<RewriterRule>
<LookFor>~/web/new/(.[0-9]*)\.aspx</LookFor> //~/表示根目錄
<SendTo>~/web/new.aspx?id=$1</SendTo> //注:用URLRewriter實現偽靜態一定要加上文件的路徑
</RewriterRule>
</Rules>
</RewriterConfig>
或者加上:<RewriterConfig configSource="URLRewriter.config"/> //用于多數正則表達規則的單獨文件
在網站根目錄中新建URLRewriter.config文件,和以上規則一樣的xml文件
4、在system.web節點中修改
<compilation debug="true" targetFramework="4.0">
<assemblies>
<add assembly="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
</assemblies>
</compilation>
改成:
<compilation defaultLanguage="c#" debug="true">
<assemblies>
<add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
</assemblies>
<!-- 加上此節點,保證原本就是.html類型的文件能正常訪問 -->
<buildProviders>
<add extension=".html" type="System.Web.Compilation.PageBuildProvider" />
<add extension=".htm" type="System.Web.Compilation.PageBuildProvider" />
<add extension=".xml" type="System.Web.Compilation.PageBuildProvider" />
</buildProviders>
</compilation>
<!--采用URLRewriter-->
<httpHandlers>
<add verb="*" path="*.html" type="URLRewriter.RewriterFactoryHandler, URLRewriter"/>
<add verb="*" path="*.htm" type="URLRewriter.RewriterFactoryHandler, URLRewriter"/>
<add verb="*" path="*.xml" type="URLRewriter.RewriterFactoryHandler, URLRewriter"/>
<add verb="*" path="*.aspx" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
</httpHandlers>
加分頁偽靜態
1、不帶參路的分頁 直接在anp控件中開啟EnableUrlRewriting、UrlPaging、UrlRewritePattern
<RewriterRule>
<LookFor>~/news_list.aspx?page=$1</LookFor> //page參數
<SendTo>~/news_list_(\d).html</SendTo> //url中頁碼如:news_list_1.html,2為第二頁,以此類推
</RewriterRule>
</Rules>
anp控件中開啟 EnableUrlRewriting="True" UrlPaging="True" UrlRewritePattern="~/news_list_{0}.html"
/{0}即指重寫中的(\d)頁碼參數
UrlPaging //開啟page參數
EnableUrlRewriting //開啟url重寫
UrlRewritePattern //重寫規則
2、帶參數的分頁 在anp控件中開啟EnableUrlRewriting、UrlPaging。并在后臺cs中定義UrlRewritePattern參數
<RewriterRule>
<LookFor>~/news_list.aspx?caid=$1&page=$2</LookFor> //caid+page兩個參數
<SendTo>~/news_list_(\d)_(\d).html</SendTo> //如news_list_1_1.html 第一個1為caid參數,第二個1為page即頁碼,如news_list_1_1.html
</RewriterRule>
</Rules>
anp.UrlRewritePattern = "~/news_list_"+caid+"_{0}.html"; //cs文件page_load中加上anp的指向