2009-02-06 128 views
12

我正在使用ASP.NET C#。在ASP.NET中重寫URL?

如何實現類似於StackOverflow.com的URL重寫過程?

http://stackoverflow.com/questions/358630/how-to-search-date-in-sql 

此外,URL中的「358630」等值的含義是什麼?這是問題ID(它們用於從表中獲取數據的基礎)?無論如何,在我的應用程序中,我使用「ID」字段來識別記錄。該字段是SQL表中的標識列。現在,我的網址是這樣的:

http://myweb.com/showdetails.aspx?id=9872 

但我希望他們看起來像:

http://myweb.com/showdetails/9872/my_question_title 

或者:

http://myweb.com/9872/my_question_title 

或任何最好的方式,這會嚐到很好的搜索機器人。

我的應用程序託管在Go Daddy的共享託管服務上,我覺得自己的服務器上沒有自定義的ASP.NET「HTTP模塊」或沒有自定義的URL用於URL重寫。我嘗試了很多樣品,但沒有運氣!

我發現Stack Overflow託管在Go Daddy(共享託管?)上。也許Stack Overflow的方法適用於我。

+0

不知道爲什麼這是倒投了。對我來說這似乎是一個合法的問題。 – 2009-02-06 17:44:33

+0

是的,這是一個完全合法的問題。由downvoters驅動的 – BobbyShaftoe 2009-02-06 17:45:48

+0

。嘖。他們沒有球說爲什麼。 – Will 2009-02-06 17:46:23

回答

12

SO正在使用ASP.NET MVC。您確實需要詳細閱讀MVC URL重寫的工作原理,但其要點是URL中的'questions'部分是Controller類的名稱(大致對應於URL中的'showdetails')和number是該Controller默認操作的ID參數(與URL中的參數'id'相同)。

2

在System.Web.Routing出現之前,通常的做法是使用UrlRewriter.NET。工作得不錯,但在配置IIS時會咬你。我不確定在ASP.NET中是否有任何使用新的Routing類的簡單方法(即,將它放入並轉到重構代碼)。

3

由於MVC不是您可以嘗試重定向404的選項。這將在ASP.NET 1.1及更高版本中工作:使用IIS配置或web.config將404s和405s重定向到您自己的處理程序,解析處理程序中的請求並重定向到適當的資源。

<configuration> 
    <system.web> 
    <customErrors mode="On" defaultRedirect="error.html"> 
     <error statusCode="404" redirect="newHandler.aspx"/> 
    </customErrors>  
    </system.web> 
</configuration>
2

請解釋值的含義 如在URL

即(大概)的數據庫中的問題ID 「358630」。在MVC模式

myurl.com/questions/358630 

類似於

myurl.com/questions.aspx?id=358630 

在URL末尾的問題的標題實際上是由應用程序忽略。它通常會被用於搜索引擎優化和人類可讀性目的。事實上,您可以在URL中更改此問題的標題,並注意頁面仍然正常加載。

1

新的System.Web.Routing DLL是ASP.NET 3.5 SP1的一部分,並且是bin deployable on ASP.NET 3.5,因此您可以使用a classic ASP.NET WebForms site上的功能。

你可能會想要注意到菲爾哈克的評論在他post on using MVC on IIS 6因爲你可能需要在你的路由的URL在.aspx擴展

http://www.mysite.com/controler.aspx/action/id 

你可能也想看看Questions Tagged SEO

網址末尾忽略的問題名稱通常被稱爲「Slug」,用於搜索引擎優化的目的是在網址中包含頁面標題。