2008-09-23 18 views
4

我們重新設計了一個網站,其中有幾個業務單位的結構。現在我想將(301)重定向到新頁面。如何通過ASP.NET重定向和修改無擴展名的URL?

IE:
是www.example.com/abc
現在www.example.com/default.aspx?article=abc

我曾嘗試使用Global.asax中要做到這一點,和它在我通過它進行調試時正常工作。

 if (Request.RawUrl.Contains("abc")) 
     { 
      Response.RedirectLocation = "/default.aspx?article=abc"; 
      Response.StatusCode = 301; 
      Response.StatusDescription = "Moved"; 
      Response.End(); 
     } 

所以http://localhost:1234/example/abc重定向正常,但(其中1234是調試服務器的端口)
http://localhost/example/abc不重定向,它給了我一個404

任何想法?


附加信息: 如果我去http://localhost/example/abc/default.aspx那麼正確重定向。

回答

6

好吧,如果端口表明您使用的是內置的Web服務器(附帶VS的一個),這可能工作因爲總是通過ASP.NET框架路由請求。

以/ abc結尾的請求不會自動路由通過ASP.NET框架,因爲IIS可能不會「知道」您希望它們。你需要檢查你的IIS設置,以確保這樣的請求被路由到ASPNET_ISAPI.DLL


編輯:要做到這一點,你需要添加一個wildcard mapping

  1. 在IIS管理器,展開本地計算機,展開網站文件夾,右鍵單擊所需的網站或虛擬目錄,然後單擊屬性。
  2. 單擊相應的選項卡:主目錄,虛擬目錄或目錄。
  3. 在應用程序設置區域中,單擊配置,然後單擊映射選項卡。
  4. 要安裝通配符應用程序映射,請執行以下操作:
    • 在映射選項卡,單擊添加或插入。
    • 在「可執行文件」文本框中鍵入DLL的路徑,或單擊「瀏覽」導航到它(例如,ASP.NET 2.0 dll位於c:\ windows \ microsoft.net \ framework \ v2.0.50727 \ aspnet_isapi。 dll在我的機器上)
    • 擴展名爲「。*」,不含引號當然是
    • 選擇你要查找的動詞(GET,HEAD,POST,DEBUG是ASP.NET常用的,你決定)
    • 確保「腳本引擎」或「應用引擎」被選中
    • 取消選中「檢查文件是否存在」
    • 點擊確定。

我可能會關閉這一點,但如果我是,希望有人會糾正我。 :)

+0

如何正確設置?我正在查看添加/編輯應用程序擴展名映射對話框。 – 2008-09-23 15:49:35

+0

它工作得很好,非常感謝 – 2008-09-23 17:01:35

0

是否已進行了一定的Web.config文件是爲每個網站(假設:1234是不同的效果:80)相同

而且,你嘗試過本地主機:80?

1

您當前正在Visual Studio Web服務器中測試該站點嗎?通常在「localhost:nnnnn」上運行該站點,其中「nnnnn」是一個端口號(如上面的1234),它不會將其設置爲在沒有一個的情況下運行。

如果您在相關機器上安裝了IIS,請將您的項目發佈給它,並且您應該能夠驗證它是否在沒有「nnnnn」的情況下工作,因爲您的代碼中沒有任何內容導致它不這樣做。

0

http://localhost/example/abc不像您期望的那樣調用Global.asax。通常,http://localhost正在端口80(:80)上運行。如果您想在端口80上運行您的站點,則需要在IIS中部署您的站點以在此處運行。

0

您需要在IIS中設置Handler映射以將所有未知擴展轉發到asp.net。第一個是因爲cassini處理所有請求,第二個不起作用,因爲IIS正在尋找那個目錄,並且它不存在,而不是運行你的代碼的.net框架。

以下是有關如何操作Url Rewriting in asp.net的信息。

如果可能的話,雖然,我會建議使用新Application Request RoutingUrlRewrite.net

2

您應該使用IIS通配符重定向,你需要這樣的事;

*; www.example.com/*; www.example.com/default.aspx?article=$0 

有一個在Microsoft

一個合理的參考。如果你使用Apache我想你會需要修改htaccess文件。

0

IIS默認情況下不會將所有請求都交給ASP.NET進行處理。只有一些資源擴展名,其中「aspx」將被傳遞給asp.net進行處理。請求http://localhost/example/abc時發生的情況是,IIS嘗試查找目錄以查看是否有從該目錄加載的默認文件(即default.aspx,index.html)。由於它無法找到其中包含垃圾「abc」標籤的目錄,因此它永遠找不到要加載的default.aspx文件。

當您嘗試加載http://localhost/example/abc/default.aspx時,IIS會看到「aspx」擴展名,並立即將其傳遞到ASP.NET運行時進行處理。 http://localhost/example/abc請求沒有加載的原因是它從來沒有交給ASP.NET,所以當然global.asax從來沒有看到它。

Cassini託管的站點處理所有請求,因此該調用確實由ASP.NET和global.asax文件處理。

我同意Darren Kopp,他建議您需要在IIS中設置Handler映射以將未知擴展轉發到ASP.NET。

相關問題