2008-10-17 90 views
1

普遍的問題:是否有IIS設置來擺脫請求的URL中多餘的'/'字符?

我們的網址來我們的IIS Web服務器的格式,如:

http://www.server.com/page.aspx

我們也看到,像這樣的URL中來:

http://www.server.com//page.aspx

我們希望,因爲當用戶代理是Internet Explorer,這是解決爲2個不同的頁面,因此,下載內容的兩倍時,就應該從高速緩存來解決擺脫這些額外的路徑字符。

我不確定這是否是一個類似url重寫模塊的問題,或者是否有配置設置。

+0

問題在於它沒有說明你在哪裏看到這樣的請求。我的測試表明這些請求不會到達IIS7日誌文件,也不會到達ASP.NET管道。它們被IIS清理爲一個斜線。 – 2012-01-24 01:06:30

回答

0

我認爲這個問題是用IE而不是IIS。

Url重寫通常是指在服務器上映射URL從http://example/shoes/clarkeshttp://example/shoes.aspx?maker=clarkes的過程,以便瀏覽器不知道它。

你需要做的是使用301 Http response code將瀏覽器從http://www.server.com//page.aspx重定向到http://www.server.com/page.aspx

從理論上講:

正如你似乎可以用ASP.NET,最透明的方式做這將是寫一個HttpModule爲先檢查請求的URI雙斜槓並執行重定向。

最簡單的方法是在Global.ascx。(cs | vb)中放一些代碼來檢查請求的BeginRequest的URI。

無論哪種方式,執行檢查的代碼都是相同的。

在實踐:

這可能是IIS或ASP.NET吞了雙「/」你能看到它的機會了。如果是IIS,那麼您可能必須在IIS前使用代理。 如果它是ASP.NET,那麼你可能會找到一個ISAPI Extension,可以爲你做這項工作。

其他選項

你既可以

  • 拆分的頁面了,這樣大部分的個人資源可以從HTML內容分別緩存
  • 教育,他們並不需要用戶把額外的斜槓英寸
+0

這個答案對於使用HttpModule是錯誤的。收到的請求像`GET //// default.aspx`永遠不會以這種形式到達ASP.NET。實際上,它永遠也不會以這種方式到達IIS日誌文件。它被清理爲`/ default.aspx`。因此,HttpModule無法解決問題。我沒有測試過,如果ISAPI擴展看到原始請求。此外,OP從未指定過什麼版本的IIS。我使用.NET 4在IIS7上進行了測試。 – 2012-01-24 01:02:24

0

修復您的鏈接!

很可能你會看到雙斜槓,因爲你在自己的網站上有錯誤的鏈接,無論是硬編碼還是腳本生成。在連接http://example.com/ + /page.aspx的腳本中錯誤地執行此操作很容易。密切關注這些類型的連接!

IIS清理掉額外的斜線,因此無法用任何ASP.NET代碼或HttpModule解決這個問題。額外的斜線甚至不會將其放入IIS日誌文件中。我使用IIS7和telnet進行測試,無法在日誌或ASP.NET中獲得額外的斜槓。

我不確定爲什麼原始問題似乎只涉及IE瀏覽器。 IE和FF都允許在URL中使用額外的斜線,並且似乎可以傳輸它們,儘管我沒有使用數據包嗅探來驗證。