我正在使用ASP.NET 2.0 C#。我想重定向爲我用 「www」 的Web應用程序的所有請求,沒有 「www」 的如何使用「www」URL來重定向而不使用「www」URL或反之亦然?
www.example.com改爲example.com
或者
example.com到www.example.com
Stackoverflow.com已經在做這個,我知道在PHP(.htaccess)文件中有一個預製機制。但如何在asp.net中做到這一點?
謝謝
我正在使用ASP.NET 2.0 C#。我想重定向爲我用 「www」 的Web應用程序的所有請求,沒有 「www」 的如何使用「www」URL來重定向而不使用「www」URL或反之亦然?
www.example.com改爲example.com
或者
example.com到www.example.com
Stackoverflow.com已經在做這個,我知道在PHP(.htaccess)文件中有一個預製機制。但如何在asp.net中做到這一點?
謝謝
我以前用以下解決方案時,我無法修改IIS設置。
要麼在一個HTTPModule(可能是最乾淨的)或Global.asax.cs在Application_BeginRequest或在一些BasePage類型的事件,如OnInit我執行檢查請求的網址,與我希望使用已知的字符串:
public class SeoUrls : IHttpModule
{
#region IHttpModule Members
public void Init(HttpApplication context)
{
context.PreRequestHandlerExecute += OnPreRequestHandlerExecute;
}
public void Dispose()
{
}
#endregion
private void OnPreRequestHandlerExecute(object sender, EventArgs e)
{
HttpContext ctx = ((HttpApplication) sender).Context;
IHttpHandler handler = ctx.Handler;
// Only worry about redirecting pages at this point
// static files might be coming from a different domain
if (handler is Page)
{
if (Ctx.Request.Url.Host != WebConfigurationManager.AppSettings["FullHost"])
{
UriBuilder uri = new UriBuilder(ctx.Request.Url);
uri.Host = WebConfigurationManager.AppSettings["FullHost"];
// Perform a permanent redirect - I've generally implemented this as an
// extension method so I can use Response.PermanentRedirect(uri)
// but expanded here for obviousness:
response.AddHeader("Location", uri);
response.StatusCode = 301;
response.StatusDescription = "Moved Permanently";
response.End();
}
}
}
}
然後註冊在你的web.config類:
<httpModules>
[...]
<add type="[Namespace.]SeoUrls, [AssemblyName], [Version=x.x.x.x, Culture=neutral, PublicKeyToken=933d439bb833333a]" name="SeoUrls"/>
</httpModules>
這種方法工作得很好了我們。
有一個關於這個的Stackoverflow博客文章。
http://blog.stackoverflow.com/2008/06/dropping-the-www-prefix/
引用傑夫:
這裏的IIS7規則,所有傳入網址中刪除WWW 前綴。剪切和 這個XML片段粘貼到您的 web.config文件下
<system.webServer>/<rewrite>/<rules> <rule name="Remove WWW prefix" > <match url="(.*)" ignoreCase="true" /> <conditions> <add input="{HTTP_HOST}" pattern="^www\.domain\.com" /> </conditions> <action type="Redirect" url="http://domain.com/{R:1}" redirectType="Permanent" /> </rule>
或者,如果你喜歡使用www前綴 ,你也可以這樣做:
<rule name="Add WWW prefix" > <match url="(.*)" ignoreCase="true" /> <conditions> <add input="{HTTP_HOST}" pattern="^domain\.com" /> </conditions> <action type="Redirect" url="http://www.domain.com/{R:1}" redirectType="Permanent" /> </rule>
這通常由您的Web服務器在配置中直接處理。正如您所提到的,.htaccess文件爲Apache Web服務器執行此操作 - 它與PHP無關。由於您使用的是ASP,因此您的服務器就是IIS。我知道有一種方法可以直接使用IIS進行設置,但我不知道它是什麼。您可能會因爲知道您應該搜索與「IIS重定向」相關的內容而不是「ASP重定向」的幫助而在搜索中獲得幫助。
也就是說,你可以在PHP中執行它,幾乎可以肯定是ASP,但是你必須在錯誤的域中打任何URL才能調用執行重定向操作的ASP腳本(使用適當的API調用或通過直接設置標題)。這將需要一些URL重寫或服務器上的某些部分,以便所有錯誤主機上的URL都由您的腳本處理...只需在服務器上首先執行:)
我們這樣做了在IIS 6上很簡單。 我們從本質上創建了第二個虛擬服務器,它與自定義404頁面.aspx頁面上沒有任何關係。 本頁面通過將URL更改爲www.whateverserver.com/whateverpage.aspx,將任何關於WHATEVERSERVER.com/whateverpage.aspx的請求都重定向到真實服務器。
設置起來非常簡單,它的優點是它可以與任何進入它的域一起工作(如果您有多個域),而無需爲每個域設置額外的規則。因此,對www.myoldserver.com/xxx的任何請求也將重定向到www.whateverserver.com/xxx
在IIS 7中,所有這些都可以使用URL編寫組件完成,但我們寧願保持重定向關閉在這個虛擬服務器上。
接受的答案適用於單個URL或少數幾個,但我的應用程序提供數百個域名(有太多的URL需要手動輸入)。
這是我的IIS7 URL重寫模塊規則(這裏的動作類型實際上是301重定向,而不是「重寫」)。偉大的作品:
<rule name="Add WWW prefix" >
<match url="(.*)" ignoreCase="true" />
<conditions>
<add input="{HTTP_HOST}" negate="true" pattern="^www\.(.+)$" />
</conditions>
<action type="Redirect" url="http://www.{HTTP_HOST}/{R:1}"
appendQueryString="true" redirectType="Permanent" />
</rule>
爲了回答這個問題,我們首先要回顧一下WWW的定義:
萬維網: ñ。縮寫。 WWW
簡而言之,使用www子域是冗餘且耗時的通信。沒有它,互聯網,媒體和社會都會變得更好。
使用頁面頂部的鏈接,您可以查看最近驗證的域以及提交域進行實時驗證。
Apache服務器:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
的Windows Server/IIS:
沒有辦法。
您可以使用Url Rewriter from Code Plex。使用相同的語法。
RewriteCond %{HTTP_HOST} !^(www).*$ [NC]
RewriteRule ^(.*)$ http://www.%1$1 [R=301]
如果你使用的是IIS 7,只需導航到URL重寫,並添加規範域名規則。
P.S.它確保您從domain.com重定向到www.domain。COM
這個版本將:
<rule name="Redirect to www" stopProcessing="true">
<match url="(.*)" />
<conditions trackAllCaptures="true">
<add input="{CACHE_URL}" pattern="^(.+)://" />
<add input="{HTTP_HOST}" negate="true" pattern="^www\.(.+)$" />
</conditions>
<action type="Redirect" url="{C:1}://www.{HTTP_HOST}/{R:1}" />
</rule>
這就是所謂的「規範名稱」如果你想看看它在其他地方。 – 2009-02-06 19:46:49
重要的是要知道,如果你不使用www(或其他子域名),那麼所有的cookie將被提交給每個子域名,你將無法使用無cookie的子域名來提供靜態內容,從而減少瀏覽器和服務器之間來回傳送的數據量。你後來可能會後悔的事:http://twitter.com/codinghorror/statuses/1637428313 – 2009-04-28 23:45:55
@Diodeus - 我們真的需要一個標籤嗎? – theycallmemorty 2009-07-14 20:59:01