使用偽靜態實現頁面跳轉中遇到的問題


     第一次使用偽靜態,而且還是跳槽到一家新公司,第一個接手的網站要用。可憐我這個啥都不會的菜鳥。。 還好,我的上司,網絡部主管,給提供了一個現成的例子,可是涅,照搬過來還是有問題,她很郁悶,那我更郁悶了,好吧,畢竟是我接手的項目,我得負責任。改,后來終於在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>

好吧,問題不是我解決的,是主管解決的。。  沒文化,害死人哪。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM