2014-01-17 43 views
1

摘要:什麼運行,Url重寫規則(303重定向)或Code.Behind Response.Redirect(...)?

如果我有這兩個東西:在 Page_Load事件

  1. ASP.Net頁面Page1.aspx的與Reponse.Redirect( 「/ Page2.aspx」)
  2. 將「*/Page1.aspx」重定向到「/Page3.aspx」的IIS上的URL重寫規則

什麼運行第一,1或2?

(ASP.Net版本爲4.0,IIS版本是7.5)

http://inhibitif.com/product/Hair-Free-Deodorant

這條路線被映射到頁面Product.aspx毛髮生


實際生活情況 - 免費面部血清是產品的關鍵。如果此頁面沒有找到產品密鑰,它會將Page_Load事件重定向到完整產品列表。

http://inhibitif.com/products

那個特定鍵(吹風免費除臭劑)已經改變(吹風自由除臭琴鍵石灰薄荷50毫升)爲每個站點所有者的請求(在我的掌握)。因此,對特定產品的任何呼叫都會被重定向到完整的產品清單(/產品)。因爲,搜索引擎優化,這將是更好地重定向到使用新密鑰(而不是重定向到一個通用的產品列表網頁)新產品的頁面,我已經在IIS

加入這個重寫規則
<rule name="Old Product Key: Hair-Free-Deodorant" patternSyntax="Wildcard" stopProcessing="true"> 
    <match url="*/product/Hair-Free-Deodorant" /> 
    <action type="Redirect" url="/product/Hair-Free-Deodorant-Key-Lime-Mint-50ml" /> 
</rule> 

規則從不觸發。重定向總是被調用。

  1. 我知道我可以將這個邏輯添加到Page_Load事件處理程序,但是, 不應該是另一種方式嗎? IIS規則應該優先獲得 嗎?
  2. 也許我的規則是錯的?

注意:重寫規則在網站上工作。例如,對「www.inhibitif.com」的任何調用被重寫爲「inhibitif.com」

+0

感謝您添加該信息。我已經刪除了我的答案,因爲我不認爲它回答了您的實際問題,現在我看到了所有的細節(實際上它可能不正確)。對於它的價值,它看起來像IIS中的URL重寫規則沒有被某種原因觸發(或者找不到匹配,或者只是首先調用Page_Load代碼),因爲重定向是302(這就是Response。重定向使用)。 – jadarnel27

+0

你是對的。重寫首先運行。匹配模式格式不正確。看到我自己對這個問題的回答。謝謝! – cockypup

回答

1

簡短的回答:

重寫規則運行。第一 的模式是畸形


詳情:

重寫規則的格式不正確釷。 e匹配模式在開始時並不需要「* /」。如IIS規則列表頁面上所示,輸入只需匹配'/'後的URL路徑。

enter image description here

這是改性(工作)的規則。注意我還修改了動作url(在開頭刪除了「\」),雖然這似乎不是必要的 - 它可以以任何方式工作。本場比賽是編輯的伎倆:

<rule name="Old Product Key: Hair-Free-Deodorant" patternSyntax="Wildcard" stopProcessing="true"> 
    <match url="product/Hair-Free-Deodorant" /> 
    <action type="Redirect" url="product/Hair-Free-Deodorant-Key-Lime-Mint-50ml" /> 
</rule> 

改變規則之後,重寫開始觸發第一(後面重定向代碼之前)。查看下面jadarnel27的答案,爲什麼它首先觸發的細節。

+0

很高興你明白了!我會繼續刪除我的答案,因爲這沒有錯,而且其他細節可能對未來的人有所幫助。 – jadarnel27

+0

完美並獲得認可。編輯我的答案並添加了對你的參考。 – cockypup

1

根據MSDN上「ASP.NET Application Life Cycle Overview for IIS 7.0 」文章中的文檔,我預計IIS重定向發生在Page_Load重定向之前。

注意,階段 「爲每個請求創建響應對象。」 先發生,其包含這些activites:

...應用對象,如HttpContext的,的HttpRequest,和 的HttpResponse被創建和初始化。 ... HttpResponse對象包含發送給客戶端的響應,其中 包含所有呈現的輸出和Cookie。

在這一點上,由於IIS知道響應是303重定向到特定頁面,我希望它將該響應加載到Response對象中。

畢竟,「該請求是由HttpApplication管道處理的」階段發生的,該階段通過ASP.NET頁面生命週期(包括Page_Load)運行。

實際測試這個理論會很有趣,我今天有幾分鐘時間會做這個理論。由於Response.Redirect actually uses a 302 redirect,這應該是很容易通過查看響應您的要求爲Page1.aspx的告訴(看,如果你有一個303或302

+0

非常感謝您的詳細信息。這是我的預期(規則有優先權),但在這種情況下,規則永遠不會觸發:(我已經添加了有關實際案例的信息:) – cockypup

+0

@cockypup感謝您添加額外的信息!我不積極,但我不知道你的重定向是否設置正確 – jadarnel27

+0

@cockypup你可以改變你的規則到'url =「。*/product/Hair-Free-Deodorant」'看看是否解決了這個問題?我所做的(*) – jadarnel27