關於偽靜態,其實就是重寫URl,之前也不清楚怎麼配置IIS,在項目中用VS運行很正常,當將網站發布後,在IIS中偽靜態就失效了,不能訪問,會報出404(不存在)的錯誤等其他的錯誤提示,今天在網上逛了幾個小時 搜遍了, 最後都是失敗,網上大多數是在IIs6.0 以及更低版本上的配置,但在IIS7.0 以上的版本就不行了,不多說,直接正題:
首先你要在你的項目裡引用兩個DLL:
URLRewriter.dll
ActionlessForm.dll
真正實現重寫的是 URLRewriter.dll 但是如果你要實現分頁,那麼必須使用這個ActionlessForm .dll
一.添加 URLRewriter.dll
1.(保證偽靜態可以在vs項目中運行)下載一個URLRewriter.dll 程式集,1:http://download.csdn.net/source/5245142:http://www.nmju.net/UserFiles/URLRewriter.rar3:download.microsoft.com/download/0/4/6/0463611e-a3f9-490d-a08c-877a83b797cf/MSDNURLRewriting.msi在項目中引用這個程式集,偽靜態文法...(例把.aspx 的頁面 用.html來表示,web.config檔案中--> 添加 以下節點<configSections>
<section name="RewriterConfig" requirePermission="false" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" /></configSections><RewriterConfig>
<Rules>
<RewriterRule><!--一個參數->
<LookFor>~/cn/ss_(.[\d]*)\.html</LookFor>
<SendTo>~/cn/news.aspx?id=$1</SendTo>
</RewriterRule><RewriterRule><!--傳兩個參數的-->
<LookFor>~/cn/ss_(.[\d]*)0(.[\w]*).html</LookFor> <!--(.[\d]*)(.[\w]*).html 或者 ss_,(.[0-9]*),(.[0-9]*)\.html-->
<SendTo><![CDATA[~/cn/news.aspx?id=$1&sid=$2]]></SendTo>
</RewriterRule> <RewriterRule><!--三個參數-->
<LookFor>~/cn/ss_(.[\d]*)0(.[\w]*)0(.[\w]*).html</LookFor> <SendTo><![CDATA[~/ZH-CN/news.aspx?id=$1&sid=$2&n_id=$3]]></SendTo>
</RewriterRule> <httpHandlers>
<add verb="*" path="*.aspx" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
<add verb="*" path="*.html" type="URLRewriter.RewriterFactoryHandler, URLRewriter" /> </httpHandlers><httpModules><add type="URLRewriter.ModuleRewriter, URLRewriter" name="ModuleRewriter"/></httpModules>2.發布網站在IIS中運行你的網站-->IIS中處理常式映射-->添加指令碼映射(路徑:*.html 可執行檔%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll 名稱:任意,比如Hml )添加萬用字元指令碼映射(路徑:* 可執行檔:C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll 名稱:任意,比如All)託管處理常式映射(路徑:* 可執行檔:System.Web.UI.PageHandlerFactory 名稱 任意 比如Html-Integrate)-------->IIS中 模組-->添加---->(名稱:任意 如All 類型:URLRewriter.ModuleRewriter 把 僅針對向asp.net 應用程式或託管處理常式發出請求調用 勾上 ok )-->ok 3.測試 訪問 http://localhost:8080/cn/ss_1.html其實訪問的是http://localhost:8080/cn/news.aspx?id=1
二.添加ActionlessForm.dll
1.添加ActionlessForm.cs類
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>
======>>
成功!
作者:Mr.Yoyior
出處:http://www.cnblogs.com/yoyiorlee/
本文著作權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文串連,如有問題,可以通過yoyiorlee@gmail.com聯絡我,非常感謝。
border-bottom: #e0e0e0 1px dashed; border-left: #e0e0e0 1px dashed; padding-top: 10px;
padding-right: 10px; padding-bottom: 10px; padding-left: 10px;
font-family: 微軟雅黑; font-size: 12px;">
反饋文章品質,你可以通過快速通道評論: