色尼玛亚洲综合影院,亚洲3atv精品一区二区三区,麻豆freexxxx性91精品,欧美在线91

在ASP.NET中重寫(xiě)URL的代碼

經(jīng)常有人請(qǐng)我指導(dǎo)應(yīng)該如何動(dòng)態(tài)地“重寫(xiě)”URL,以在他們的ASP.NETweb應(yīng)用中發(fā)布比較干凈的URL端點(diǎn)。這個(gè)博客帖子概述了幾個(gè)方法,你可以用來(lái)在ASP.NET中干凈地映射或重寫(xiě)URL,以及按照你自己的需求組織你的URL的結(jié)構(gòu)。 

為什么URL映射和重寫(xiě)很重要?
下面是開(kāi)發(fā)人員想要對(duì)URL有更大的靈活性的最常見(jiàn)的場(chǎng)景: 

1) 處理這樣的情形:你要更改你的web應(yīng)用中網(wǎng)頁(yè)的結(jié)構(gòu),但你同時(shí)也要確保在你移動(dòng)網(wǎng)頁(yè)后,那些被人收藏的老URL不會(huì)成為死鏈接。重寫(xiě)URL允許你透明地將請(qǐng)求轉(zhuǎn)交到新的網(wǎng)頁(yè)地址而不出錯(cuò)。 

2)  在象Google,Yahoo 和 Live 這樣的搜索引擎中提高你網(wǎng)站上網(wǎng)頁(yè)的搜索相關(guān)性。具體地來(lái)說(shuō),URL重寫(xiě)經(jīng)常能使你在你網(wǎng)站上網(wǎng)頁(yè)的 URL里更加容易地嵌入關(guān)鍵詞,這么做往往會(huì)增加別人點(diǎn)擊你的鏈接的機(jī)會(huì)。從使用查詢(xún)字符串參數(shù)到使用完全限定(fully qualified)的 URL也能在某些情形下提高你在搜索引擎結(jié)果中的優(yōu)先順序。使用強(qiáng)制referring鏈接使用同樣的大小寫(xiě)(same case)和URL入口(譬如,使用weblogs.ASP.NET/scottgu 而不是 weblogs.ASP.NET/scottgu/default.ASPx)的技術(shù)也能避免因跨越多個(gè)URL而造成的網(wǎng)頁(yè)排名(pagerank)的降低 (avoid diluting your pagerank across multiple URLs),從而增加你的搜索結(jié)果。 

在一個(gè)搜索引擎日漸驅(qū)動(dòng)網(wǎng)站訪問(wèn)量的世界里,在你的網(wǎng)頁(yè)排名上稍微得到一些提高就能給你的業(yè)務(wù)帶來(lái)不錯(cuò)的投資回報(bào)(ROI)。逐漸地,這驅(qū)使開(kāi)發(fā)人員使用 URL重寫(xiě)以及其他SEO(搜索引擎優(yōu)化 )技術(shù)來(lái)優(yōu)化網(wǎng)站(注,SEO是個(gè)步調(diào)很快的空間,增加你的搜索相關(guān)性的建議月月在演變)。想了解一些關(guān)于搜索引擎優(yōu)化方面好的建議的話(huà),我建議你閱讀一下《SSW Rules to Better Google Rankings (SSW的提高Google排名之要領(lǐng))》,以及MarketPosition關(guān)于《how URLs can affect top search engine ranking  (URL會(huì)如何影響頂級(jí)搜索引擎排名)》的文章。 

例程的URL重寫(xiě)場(chǎng)景
為這個(gè)博客貼子起見(jiàn),我將假設(shè)我們將在一個(gè)應(yīng)用里建造一套電子商務(wù)的產(chǎn)品目錄網(wǎng)頁(yè),產(chǎn)品是按種類(lèi)來(lái)組織的(譬如,圖書(shū),錄像,CD,DVD等等)。 

讓我們假定一開(kāi)始我們有個(gè)網(wǎng)頁(yè)叫Products.ASPx,通過(guò)查詢(xún)字符串參數(shù)接受一個(gè)類(lèi)別名稱(chēng),相應(yīng)地過(guò)濾顯示的產(chǎn)品。與這個(gè)Products.ASPx網(wǎng)頁(yè)對(duì)應(yīng)類(lèi)別的URL看上去象這樣:

http://www.store.com/products.ASPx?category=books
http://www.store.com/products.ASPx?category=DVDs
http://www.store.com/products.ASPx?category=CDs  

但我們不想使用查詢(xún)字符串來(lái)呈示每個(gè)類(lèi)別,我們想修改應(yīng)用,讓每個(gè)產(chǎn)品類(lèi)別對(duì)搜索引擎來(lái)說(shuō)看上去象是一個(gè)獨(dú)特的URL,并且在實(shí)際的URL中嵌入關(guān)鍵詞(而不是通過(guò)查詢(xún)字符串參數(shù))。我們將在這個(gè)博客帖子剩下來(lái)的篇幅里,討論一下達(dá)成這個(gè)目的我們可以采取的4種不同方法。 

方法一:使用Request.PathInfo 參數(shù)而不是查詢(xún)字符串

我將示范的第一個(gè)方法根本不使用URL重寫(xiě),而是使用ASP.NET中不太為人所知的一個(gè)特性,Request的PathInfo屬性。為幫助解釋這個(gè)屬性的有用之處,考慮一下我們電子商店下面這些URL的情形: 

http://www.store.com/products.ASPx/Books
http://www.store.com/products.ASPx/DVDs
http://www.store.com/products.ASPx/CDs
你會(huì)在上面這些URL中注意到的一個(gè)東西是,他們不再含有查詢(xún)字符串值,取而代之的是,類(lèi)別參數(shù)的值是附加到URL上的,是以Products.ASPx網(wǎng)頁(yè)處理器名稱(chēng)之后的/參數(shù) 值的方式出現(xiàn)的。然后,一個(gè)自動(dòng)化的搜索引擎爬蟲(chóng)(search engine crawler)會(huì)把這些URL解釋成三個(gè)不同的URL,而不是一個(gè)URL帶有三個(gè)不同的輸入值 (搜索引擎是不理會(huì)文件擴(kuò)展名的,只把它當(dāng)作URL中的另一個(gè)字符而已)。 

你也許很想知道怎么在ASP.NET中處理這個(gè)附加的參數(shù)的情形。好消息是,這非常簡(jiǎn)單。只要使用Request的PathInfo屬性就可以了,該屬性返回 URL中緊隨 products.ASPx 后面的那部分內(nèi)容。所以,對(duì)上面這些URL, Request.PathInfo會(huì)分別返回  “/Books”, “/DVDs”,和 “/CDs”(萬(wàn)一你想知道的話(huà), Request的Path 屬性返回“/products.ASPx”  )。 

然后,你可以輕易地編寫(xiě)一個(gè)函數(shù)來(lái)獲取產(chǎn)品類(lèi)別,象這樣(下面這個(gè)函數(shù)去除前面的斜杠字符,只返回“Books”,“DVDs”,或 “CDs”): 


    Function GetCategory() As String

        If (Request.PathInfo.Length = 0) Then
            Return ""
        Else
            Return Request.PathInfo.Substring(1)
        End If

    End Function 

樣例下載:我建立的一個(gè)展示這個(gè)技術(shù)的樣例應(yīng)用可以在這里下載。這個(gè)樣例和這個(gè)技術(shù)的很好的地方在于,為部署使用這個(gè)方法的ASP.NET應(yīng)用,不需作任何服務(wù)器配置改動(dòng)。在共享主機(jī)的環(huán)境里,這個(gè)技術(shù)也行之有效。 

方法二:使用HttpModule實(shí)現(xiàn)URL重寫(xiě) 
上述Request.PathInfo技術(shù)的替換方法是,利用ASP.NET提供的HttpContext.RewritePath方法。這個(gè)方法允許開(kāi)發(fā)人員動(dòng)態(tài)地重寫(xiě)收到的URL的處理路徑,然后讓ASP.NET使用剛重寫(xiě)過(guò)后的路徑來(lái)繼續(xù)執(zhí)行請(qǐng)求。 

譬如,我們可以選擇向大眾呈示下列URL:


http://www.store.com/products/Books.ASPx
http://www.store.com/products/DVDs.ASPx
http://www.store.com/products/CDs.ASPx  

在外界看來(lái),網(wǎng)站上有三個(gè)單獨(dú)的網(wǎng)頁(yè)(對(duì)搜索爬蟲(chóng)而言,這看上去很棒)。通過(guò)使用 HttpContext的RewritePath方法,我們可以在這些請(qǐng)求剛進(jìn)入服務(wù)器時(shí),動(dòng)態(tài)地把收到的URL重寫(xiě)成單個(gè)Products.ASPx網(wǎng)頁(yè)接受一個(gè)查詢(xún)字符串的類(lèi)別名稱(chēng)或者PathInfo參數(shù)。譬如,我們可以使用Global.asax中的Application_BeginRequest事件,來(lái)這么做: 

    void Application_BeginRequest(object sender, EventArgs e) {

        string fullOrigionalpath = Request.Url.ToString();

        if (fullOrigionalpath.Contains("/Products/Books.ASPx")) {
            Context.RewritePath("/Products.ASPx?Category=Books");
        }
        else if (fullOrigionalpath.Contains("/Products/DVDs.ASPx")) {
            Context.RewritePath("/Products.ASPx?Category=DVDs");
        }
    }  

手工編寫(xiě)象上面這樣的編碼的壞處是,很枯燥乏味,而且容易犯錯(cuò)。我建議你別自己寫(xiě),而是使用網(wǎng)上現(xiàn)成的HttpModule來(lái)完成這項(xiàng)工作。這有幾個(gè)你現(xiàn)在就可以下載和使用的免費(fèi)的HttpModule: 

UrlRewriter.NET 
UrlRewriting.NET
這些模塊允許你用聲明的方式在你應(yīng)用的web.config文件里表達(dá)匹配規(guī)則。譬如,在你應(yīng)用的web.config文件里使用 UrlRewriter.NET模塊來(lái)把上面的那些URL映射到單個(gè)Products.ASPx頁(yè)上,我們只要把這個(gè)web.config文件添加到我們的應(yīng)用里去就可以了(不用任何編碼): 


<?xml version="1.0"?>

<configuration>

  <configSections>
    <section name="rewriter"  
             requirePermission="false" 
             type="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter" />
  </configSections>

  <system.web>

    <httpModules>
      <add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter"/>
    </httpModules>

  </system.web>

  <rewriter>
    <rewrite url="~/products/books.ASPx" to="~/products.ASPx?category=books" />
    <rewrite url="~/products/CDs.ASPx" to="~/products.ASPx?category=CDs" />
    <rewrite url="~/products/DVDs.ASPx" to="~/products.ASPx?category=DVDs" />
  </rewriter>  

</configuration>  

上面的HttpModule URL重寫(xiě)模塊還支持正則表達(dá)式和URL模式匹配(以避免你在web.config 文件里硬寫(xiě)每個(gè)URL)。所以,不用寫(xiě)死類(lèi)別名稱(chēng),你可以象下面這樣重寫(xiě)匹配規(guī)則,把類(lèi)別名稱(chēng)動(dòng)態(tài)地從任何/products/[類(lèi)別].ASPx組合的URL里取出來(lái): 


  <rewriter>
    <rewrite url="~/products/(.+).ASPx" to="~/products.ASPx?category=$1" />
  </rewriter>  


這使得你的編碼極其干凈,并且擴(kuò)展性非常之好。

樣例下載:我建立的一個(gè)使用UrlRewriter.NET模塊展示這個(gè)技術(shù)的樣例應(yīng)用可以在這里下載。 

這個(gè)樣例和這個(gè)技術(shù)的很好的地方在于,為部署使用這個(gè)方法的ASP.NET應(yīng)用,不需作任何服務(wù)器配置改動(dòng)。在設(shè)置為中等信任安全等級(jí) (medium trust)的共享主機(jī)的環(huán)境里,這個(gè)技術(shù)也行之有效 (只要把文件FTP/XCOPY到遠(yuǎn)程服務(wù)器就可以了,不需要安裝)。 

方法三:在IIS7中使用HttpModule 實(shí)現(xiàn)無(wú)擴(kuò)展名的URL重寫(xiě)
上述的HttpModule方法在你要重寫(xiě)的URL含有.ASPx 擴(kuò)展名或者包含另一個(gè)被設(shè)置為ASP.NET處理的擴(kuò)展名的情形下一切都工作。你這么做的話(huà),不需要任何特定的服務(wù)器配置,你只要把你的應(yīng)用拷貝到遠(yuǎn)程服務(wù)器,它會(huì)正常工作的。 

但有的時(shí)候,你要重寫(xiě)的URL要么擁有一個(gè)不為ASP.NET處理的文件擴(kuò)展名(譬如, .jpg, .gif, 或 .htm),要么根本沒(méi)有擴(kuò)展名。譬如,我們也許要把這些URL呈示成公開(kāi)的產(chǎn)品目錄網(wǎng)頁(yè)(注意,它們沒(méi)有 .ASPx 擴(kuò)展名): 


http://www.store.com/products/Books
http://www.store.com/products/DVDs
http://www.store.com/products/CDs
在 IIS5  和 IIS6 中,使用ASP.NET處理上面這樣的URL不是很容易。 IIS 5/6 使得在ISAPI擴(kuò)展(ASP.NET就是這樣一個(gè)擴(kuò)展)里非常難以重寫(xiě)這些類(lèi)型的URLS。你需要做的是使用ISAPI過(guò)濾器在IIS請(qǐng)求管道(request pipeline)的較早期實(shí)現(xiàn)重寫(xiě)。我將在下面的第四個(gè)方法里示范如何在 IIS5/6 實(shí)現(xiàn)這樣的重寫(xiě)。 

但好消息是, IIS 7.0使得處理這類(lèi)情形容易之極。你現(xiàn)在可以在  IIS 請(qǐng)求管道的任何地方執(zhí)行一個(gè)HttpModule,這意味著你可以使用上面的URLRewriter 模塊 來(lái)處理和重寫(xiě)無(wú)擴(kuò)展名的URL(甚至是帶有 .ASP,.php,或 .jsp 擴(kuò)展名的URL)。下面示范了你在IIS7中該如何配置: 


<?xml version="1.0" encoding="UTF-8"?>

<configuration>

  <configSections>
    <section name="rewriter" 
             requirePermission="false" 
             type="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter" />
  </configSections>

  <system.web>

    <httpModules>
      <add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter" />
    </httpModules>

  </system.web>

  <system.webServer>

    <modules runAllManagedModulesForAllRequests="true">
      <add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule" />
    </modules>

    <validation validateIntegratedModeConfiguration="false" />

  </system.webServer>

  <rewriter>
    <rewrite url="~/products/(.+)" to="~/products.ASPx?category=$1" />
  </rewriter>

</configuration> 

注意一下<system.webServer>內(nèi)<modules>部分設(shè)置為true的 runAllManagedModulesForAllRequests屬性。這個(gè)屬性確保來(lái)自Intelligencia的 UrlRewriter.NET模塊(是在IIS7正式發(fā)布前編寫(xiě)的),會(huì)被調(diào)用,有機(jī)會(huì)重寫(xiě)到服務(wù)器的所有URL請(qǐng)求(包括文件夾)。上面的 web.config文件非常酷之處在于: 

1) 它在任何IIS7機(jī)器上都會(huì)工作,你不需要管理員在遠(yuǎn)程主機(jī)上啟用任何東西,它也能在設(shè)置為中等信任安全等級(jí)(medium trust)的共享主機(jī)的環(huán)境場(chǎng)景下工作。 

2)  因?yàn)槲以?lt;httpModules>和 IIS7 的<modules> 部分同時(shí)配置了UrlRewriter,我既能在  VS內(nèi)置的web服務(wù)器(即Cassini)中,也能在IIS7下使用同樣的URL重寫(xiě)規(guī)則。兩者完全支持無(wú)擴(kuò)展名的URL重寫(xiě)。這使得測(cè)試和開(kāi)發(fā)非常容易。 

IIS 7.0 將在今年的晚些時(shí)候作為Windows Longhorn服務(wù)器的一部分發(fā)布,將在幾個(gè)星期內(nèi)隨Beta3版本的發(fā)布支持go-live許可。由于添加到IIS7中的所有的新宿主(hosting)特性,我們預(yù)期主機(jī)供應(yīng)商將會(huì)非常快地開(kāi)始積極提供IIS7賬號(hào),這意味著你應(yīng)該很快就可以開(kāi)始利用上述的無(wú)擴(kuò)展名的URL重寫(xiě)支持。我們將在 IIS7 RTM 時(shí)段里發(fā)布一個(gè)為微軟所支持的URL重寫(xiě)模塊,該模板是免費(fèi)的,你可以在IIS7上使用,并且這模塊將對(duì)你web服務(wù)器上的所有內(nèi)容的高級(jí)URL重寫(xiě)場(chǎng)景提供很好的支持。 

樣例下載:我建立的一個(gè)使用IIS7和UrlRewriter.NET模塊展示無(wú)擴(kuò)展名URL重寫(xiě)技術(shù)的樣例應(yīng)用可以在這里下載。 

方法四:在IIS5和IIS6中使用 ISAPIRewrite 來(lái)實(shí)現(xiàn)無(wú)擴(kuò)展名的URL重寫(xiě) 
如果你不想等到IIS7出來(lái)才利用無(wú)擴(kuò)展名的URL重寫(xiě),那么你最好的措施是使用ISAPI過(guò)濾器來(lái)重寫(xiě)URL。我知道有2個(gè)ISAPI過(guò)濾器方案,你也許要去看一下: 

Helicon Tech's ISAPI Rewrite: 他們提供一個(gè)99美元(可免費(fèi)試用30天)的ISAPI URL重寫(xiě)產(chǎn)品完整版,以及一個(gè)免費(fèi)的輕量級(jí)版本。 
Ionic's ISAPI Rewrite: 這可以免費(fèi)下載(源碼和可執(zhí)行文件都可以下載)
我沒(méi)親手用過(guò)上面的產(chǎn)品,雖然我聽(tīng)過(guò)到對(duì)這2個(gè)產(chǎn)品的好評(píng)。Scott Hanselman和 Jeff Atwood 最近都寫(xiě)了精彩的博客貼子講述使用這些產(chǎn)品的體驗(yàn),同時(shí)提供了一些如何在這些產(chǎn)品中配置匹配規(guī)則的例子。Helicon Tech的ISAPI Rewrite的規(guī)則使用跟 Apache 的mod_rewrite同樣的句法,譬如(取自Jeff的博客貼子): 


[ISAPI_Rewrite]
# fix missing slash on folders
# note, this assumes we have no folders with periods!
RewriteCond Host: (.*)
RewriteRule ([^.?]+[^.?/]) http/://$1$2/ [RP]

# remove index pages from URLs
RewriteRule (.*)/default.htm$ $1/ [I,RP]
RewriteRule (.*)/default.ASPx$ $1/ [I,RP]
RewriteRule (.*)/index.htm$ $1/ [I,RP]
RewriteRule (.*)/index.html$ $1/ [I,RP]

# force proper www. prefix on all requests
RewriteCond %HTTP_HOST ^test/.com 
RewriteRule ^/(.*) http://www.test.com/$1  [RP]

# only allow whitelisted referers to hotlink images
RewriteCond Referer: (?!http://(?:www/.good/.com|www/.better/.com)).+
RewriteRule .*/.(?:gif|jpg|jpeg|png) /images/block.jpg [I,O] 

一定要去讀一下Scott和Jeff的貼子以了解這些ISAPI 模塊的詳情,以及你都能用它們做些什么。 

注:使用ISAPI過(guò)濾器的一個(gè)壞處是,共享主機(jī)環(huán)境一般不允許你安裝這樣的組件,所以你要用它們的話(huà),你要么需要一個(gè)專(zhuān)用的虛擬主機(jī)服務(wù)器,要么需要一個(gè)專(zhuān)用的主機(jī)服務(wù)器。但,如果你有一個(gè)主機(jī)計(jì)劃允許你安裝ISAPI的話(huà),這會(huì)在IIS5/6下會(huì)提供最大的靈活性,讓你過(guò)渡到IIS7推出為止。 

在URL重寫(xiě)里處理ASP.NET PostBack
大家在使用ASP.NET和重寫(xiě)URL時(shí)經(jīng)常遇到的一個(gè)疑難雜癥跟處理postback場(chǎng)景有關(guān)。具體地來(lái)說(shuō),當(dāng)你在一個(gè)網(wǎng)頁(yè)上放置一個(gè) < form runat="server"> 控件時(shí),ASP.NET 會(huì)自動(dòng)地默認(rèn)輸出標(biāo)識(shí)的action屬性指向當(dāng)前所在頁(yè)面。當(dāng)使用URL重寫(xiě)時(shí),會(huì)出現(xiàn)這樣的問(wèn)題,<form> 控件顯示的URL不是原先請(qǐng)求的URL(譬如,/products/books),而是重寫(xiě)過(guò)后的 URL(譬如,/products.ASPx?category=books)。這意味著,當(dāng)你做一個(gè)postback到服務(wù)器時(shí),URL不再是你原先干凈利落的那個(gè)了。 

在 ASP.NET 1.0 和1.1 中,大家經(jīng)常訴諸于繼承<form> 控件生成他們自己的控件,來(lái)正確地輸出要使用的action屬性。雖然這可以工作,但結(jié)果有點(diǎn)亂,因?yàn)檫@意味著你需要更新你所有的頁(yè)面來(lái)使用這個(gè)另外的表單控件,而且有時(shí)在 Visual Studio所見(jiàn)即所得設(shè)計(jì)器里也會(huì)遇上問(wèn)題。 

好消息是,在ASP.NET 2.0中,有個(gè)比較干凈的訣竅你可以用來(lái)重寫(xiě)<form>控件的action屬性。具體地來(lái)說(shuō),你可利用新的ASP.NET 2.0控件適配器擴(kuò)展架構(gòu)來(lái)定制控件的輸出,用你提供的值來(lái)覆蓋action屬性的值。這不要求在你的.ASPx頁(yè)面里做任何編碼改動(dòng),而只要在你的/app_browsers文件夾里添加一個(gè).browser 文件,注冊(cè)使用一個(gè)控件適配類(lèi)即可輸出新的action屬性。 

 


你可在這里查看一個(gè)我創(chuàng)建的樣例實(shí)現(xiàn),其展示了該如何實(shí)現(xiàn)與URL重寫(xiě)協(xié)作的表單控件適配器(Form Control Adapter) 。它在我上面使用的第一個(gè) (Request.PathInfo),第二個(gè)方法(UrlRewriter.NET 模塊)中都工作,它使用Request的RawUrl屬性獲取原先沒(méi)改寫(xiě)過(guò)的 URL來(lái)顯示。而在第四個(gè)方法(ISAPIRewrite過(guò)濾器)中,你可以獲取ISAPI過(guò)濾器保存在 Request.ServerVariables["HTTP_X_REWRITE_URL"] 中的原先的URL值。 

我上面的FormRewriter類(lèi)實(shí)現(xiàn)在標(biāo)準(zhǔn)的ASP.NETASP.NET AJAX 1.0網(wǎng)頁(yè)上應(yīng)該都工作(如果你遇上問(wèn)題的話(huà),告訴我一聲)。

正確地處理CSS和圖像引用
不少人在第一次使用URL重寫(xiě)時(shí),有時(shí)會(huì)遇上一個(gè)疑難雜癥,就是他們發(fā)現(xiàn)他們的圖像和CSS樣式表引用有時(shí)會(huì)停止工作。這是因?yàn)樗麄冊(cè)贖TML網(wǎng)頁(yè)里有對(duì)這些文件的相對(duì)引用,當(dāng)你開(kāi)始在應(yīng)用里重寫(xiě)URL時(shí),你需要意識(shí)到瀏覽器經(jīng)常會(huì)在不同的邏輯層次結(jié)構(gòu)層上 (logical hierarchy levels)請(qǐng)求文件,而不是實(shí)際存儲(chǔ)服務(wù)器上的東西。 

譬如,如果我們上面的 /products.ASPx網(wǎng)頁(yè)對(duì).ASPx 網(wǎng)頁(yè)里的logo.jpg有一個(gè)相對(duì)引用,但是通過(guò) /products/books.ASPx這個(gè) URL來(lái)請(qǐng)求的,那么瀏覽器在顯示網(wǎng)頁(yè)時(shí),將會(huì)發(fā)出一個(gè)對(duì)/products/logo.jpg的請(qǐng)求,而不是對(duì)/logo.jpg的請(qǐng)求。要正確地引用這個(gè)文件,確認(rèn)你用根目錄限定了(root qualify)CSS和圖像引用(“/style.css”,而不是 “style.css”)。對(duì)于 ASP.NET控件,你也可以使用“~”句法從你應(yīng)用的根目錄來(lái)引用文件(譬如,<ASP:image imageurl= "~/images/logo.jpg" runat="server"/>) 。 

希望本文對(duì)你有所幫助,

Scott

AspNet技術(shù)在ASP.NET中重寫(xiě)URL的代碼,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 蒙阴县| 广灵县| 建阳市| 苗栗市| 黎城县| 农安县| 鸡泽县| 曲靖市| 仁寿县| 吕梁市| 汉源县| 滁州市| 沅陵县| 苏州市| 武鸣县| 荔波县| 芦溪县| 北流市| 广河县| 新竹市| 巴中市| 新安县| 永善县| 贵溪市| 宣武区| 上林县| 廊坊市| 金坛市| 边坝县| 孝义市| 遂宁市| 唐河县| 满洲里市| 吉木萨尔县| 阿鲁科尔沁旗| 精河县| 赫章县| 阿勒泰市| 庐江县| 沅陵县| 龙口市|