第一次使用偽靜態,而且還是跳槽到一家新公司,第一個接手的網站要用。可憐我這個啥都不會的菜鳥。。 還好,我的上司,網絡部主管,給提供了一個現成的例子,可是涅,照搬過來還是有問題,她很郁悶,那我更郁悶了,好吧,畢竟是我接手的項目,我得負責任。改,后來終於在n次修改配置文件,n次修改IIS后,算是成功了。總結一下,以免忘記
1、首先吧,要有重寫路徑的dll文件,在這里我用的是Intelligencia.UrlRewriter.dll,添加對它的引用
2、配置web.config文件 在這里我配置了四處,分別是:
第一處:指定重寫url的dll文件,添加對它的引用,並設置標簽名稱為rewriter
<configuration>
<!-- -=S=- 為偽靜態配置的文件 -->
<configSections>
<section name="rewriter" requirePermission="false" type="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter"/>
</configSections>
</configuration>
<!-- -=E=- 為偽靜態配置的文件 -->
第二處:同樣是在<configuration /> 標簽下
<!-- -=S=- 為偽靜態配置的文件 -->
<rewriter>
<rewrite url="^/404.html/?$" to="/404.aspx" processing="stop"/>
<rewrite url="^/?$" to="/Index.aspx" processing="stop"/>
<rewrite url="^(/.+(\.gif|\.png|\.jpg|\.ico|\.css|\.js)(\?.+)?)$" to="$1" processing="stop"/>
<rewrite url="~/product_(.+)_([0-9]+).html$" to="~/productInfo.aspx?ID=$2" processing="stop"/>
<rewrite url="~/product_(.+).html" to="~/product.aspx?TypeDesc=$1" processing="stop"/>
</rewriter>
<!-- -=E=- 為偽靜態配置的文件 -->
如上則是為重寫指定規則和重寫到達頁面,以<rewrite url="~/product_(.+)_([0-9]+).html$" to="~/productInfo.aspx?ID=$2" processing="stop"/>為例:
url的內容是指定重寫后顯示的格式,在這里的意思是,會顯示為諸如:product_abc_123.html之類。(.+)是指定一個參數,該參數可以為任意值,([0-9]+),是第二個參數,該參數必須為數字格式, to的內容是指的實際到達的頁面,后面的$符號必須是數字,指定傳遞的第幾個參數,在這里是第二個。 不知道url里的那個$是不是指的有參數要傳遞。。
第三處配置: 配置在 <system.web/>標簽里
<!-- -=S=- 為偽靜態配置的內容 -->
<httpModules>
<add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter"/>
</httpModules>
<!-- -=E=- 為偽靜態配置的內容 -->
第四處配置: 配置在<configuration/>的最后,這個位置應該不是固定的吧,我沒驗證。。 具體這塊的內容我也不是很清楚。。
<!-- -=S=- 為偽靜態配置的內容 -->
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter"/>
</modules>
<directoryBrowse enabled="true" />
<defaultDocument>
<files>
<clear />
<add value="default.aspx" />
<add value="Default.htm" />
<add value="Default.asp" />
<add value="index.htm" />
<add value="index.html" />
<add value="iisstart.htm" />
</files>
</defaultDocument>
</system.webServer>
<!-- -=E=- 為偽靜態配置的內容 -->
3、配置完成了之后接着就是為要重定向的內容規范格式了,我在這里以一個<li/>說明,<a/>標簽里的href值就是遵循了web.config配置文件的url格式的,它指定的是第二個配置,
<li><a href='/product_<%#Eval("TypeDesc") %>.html' target="_blank">
<%# Eval("TypeName")%></a></li>
實際上跳轉到product.aspx頁面 在product.aspx.cs頁面上用原來的方式取值,即是:如果有傳參的話,同原來的取值方式,即可。
4、配置完成了之后,可能部屬到IIS里並不會達到理想的效果,那么就要看站點的配置了,在這里我使用的IIS7.5,一直是提示找不到路徑,, 那么解決方案就是:
打開IIS下網站功能視圖,——>處理程序映射——>右側“添加腳本映射”——> 在彈出框中填寫 請求路徑值為:*.html,可執行文件為:C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll,名稱值,隨便填寫,然后確定,即可。
這里指只接受后綴名為html的文件重寫
IIS6的配置引用下別人的:http://down.chinaz.com/server/201201/1542_1.htm 嘿嘿
5、即使解決了4的問題,那么在瀏覽時,可能會發現一些圖片路徑不對,那么,如果如上配置,使重定向的頁面都處於同一級目錄下,那么就不會出現這個問題了。
這就是我碰到的問題和解決辦法,記錄下來,以免忘記。
6、好吧,一天還沒過去,就又測試出來新問題了:我后台管理頁面在Manager文件夾里放着,里面有幾個html頁面,都是為了管理員登陸退出用的,結果,問題,來了,如果登陸后台,則一直提示:
錯誤 324 (net::ERR_EMPTY_RESPONSE):服務器已斷開連接,且未發送任何數據
很讓我郁悶啊,本地也配置好了,測試的都沒問題,可是上傳上去就出了這個問題了,還以為是服務器的錯,結果是偽靜態重寫url路徑的問題,既然在web.config里做了如上配置,只要是html頁面一律重寫,那么Manager文件夾的html頁面也無法避免了,也被重寫了,那么解決方案如下:
修改web.config配置文件 ,需要修改兩處: [ps:參考:http://abcd9.com/?post=354]
a、在節點<system.web />下添加:
<httpHandlers>
<!--設置應用程序映射(url重寫后要加的)-->
<add path="*.html" verb="*" type="System.Web.UI.PageHandlerFactory" validate="true"/>
</httpHandlers>
b、在標簽<compilation />里添加:
<!--設置應用程序映射(url重寫后要加的)-->
<buildProviders>
<add extension=".html" type="System.Web.Compilation.PageBuildProvider" />
</buildProviders>
好吧,問題不是我解決的,是主管解決的。。 沒文化,害死人哪。