2010-02-17 21 views
3

有一個客戶的問題困擾着我。IIS 6.0在URL中的頁面名稱之後用斜槓做什麼?

他們使用IIS 6.0,出於某種原因,而不是在他們的服務器上發出一個頁面的正常請求,我會打電話給www.domain.com/Default.aspx某人鍵入www.domain.com/Default。 aspx/randomstuff

IIS的響應似乎是正常服務於Default.aspx,但就瀏覽器而言,路徑是www.domain.com/Default.aspx/而不是www.domain。 com /因此所有相對路徑CSS,圖像等失敗

我看着小提琴手的交通,似乎所有這些圖像等請求,如www.domain.com/Default.aspx /images/image.gif也是返回Default.aspx的內容,不需要t o說,不是一個有效的圖像!

我不相信他們正在做任何特殊的URL重寫,但只是可以肯定的,我嘗試了一個新創建的ASP.NET Web應用程序的實驗,結果是一樣的。

那麼是什麼導致IIS將/Default.aspx/randomstuff這樣的URL作爲Default.aspx的請求傳遞給ASP.NET管道?它可以被阻止,並且只是按照你所期望的那樣拋出一個404?

回答

3

這被稱爲PathInfo組件。

你可以停止這樣的:

if (!String.IsNullOrEmpty(Request.PathInfo)) throw new HttpException(404); 
+2

另請參閱MSDN文章底部的IIS中有關「檢查該文件是否存在」的評論。 –

+0

似乎最好的重載是'HttpException(404,「not found」)'。另外,在我的場景中,最好'Response.StatusCode = 404; Response.End();'而不是拋出'HttpException'。 –

2

是的,這是完全正常的。 Apache也會這樣做。

您可以使用它進行路由,因此您可以使用URL /script.name/random/stuff而不是/script.name?page=random&section=stuff,而無需設置URL重寫。

當然,瀏覽器不知道script.name是真正的腳本,randomstuff不是真正的服務器端路徑的一部分。所以所有的URL都是相對於random目錄。通常,當您使用路由編寫應用程序時,出於這個原因,您必須確保您使用的是根URL或絕對URL,而不是相對URL。

而且可以停下來,並做出剛剛拋出404如你所料?

是的,就像在SLaks的回答中一樣。然而,如果沒有拖尾的Path Info部分,將301發送到實際地址可能會更好。

相關問題