>news:623D89CCDA0840B38E99691CFA321876@OfficeVista ...
Quote:
>>You can do this in an httpmodule
>>>
>>Here's one I wrote that uses a table in a database to match and replace.
>>It will handle 404 errors as well as being pre-emptive. It will either
>>do a 301 redirect or RewritePath (based on flag in db)
>>>
>>Table Schema:
>> OldUrl : varchar(n) - RegEx match or literal (based on field below)
>> NewUrl : varchar(n) - literal url to redirect to
>> Redirect301: bit - true if 301 redirect, false if RewritePath
>> Literal: bit - specifies that the OldUrl is a literal value and not a
>>pattern match.
>>>
>>I use this in my DotNetNuke sites regularly.
>>>
>>----< code start ---
>>>
>>using System;
>>using System.Collections.Generic;
>>using System.Text;
>>using System.Web;
>>using System.Text.RegularExpressions;
>>using System.Web.Caching;
>>>
>>namespace DNNRedirect
>>{
>> public class HttpModule : IHttpModule
>> {
>> public HttpModule()
>> {
>> //
>> // TODO: Add constructor logic here
>> //
>> }
>>>
>> public void Init(HttpApplication app)
>> {
>> app.BeginRequest += new EventHandler(this.OnBeginRequest);
>> }
>>>
>> public void OnBeginRequest(object s, EventArgs e)
>> {
>> HttpApplication app = (HttpApplication)s;
>> HttpRequest request = app.Request;
>> HttpResponse response = app.Response;
>> String requestUrl = request.Url.AbsoluteUri;
>> String domainPath =
>>request.Url.AbsoluteUri.Replace(request.Url.Path AndQuery, "");
>> String appPath = request.ApplicationPath;
>> if (appPath.Length 2)
>> appPath += "/";
>> appPath = domainPath + appPath;
>>>
>> RedirectorDataSet.dmbcllcRedirectDataTable redirectTable;
>> redirectTable = RedirectController.GetData();
>> int rowIndex = 0;
>> // Handle 404 Errors.
>> if (request.ServerVariables["QUERY_STRING"].Length 4 &&
>>request.ServerVariables["QUERY_STRING"].StartsWith("404;"))
>> {
>> requestUrl =
>>request.ServerVariables["QUERY_STRING"].Substring(4).ToLower();
>> }
>> // Otherwise, be pre-emptive.
>>>
>> string newURL = null;
>> bool redirect = false;
>> for (rowIndex = 0; rowIndex < redirectTable.Rows.Count;
>>rowIndex++)
>> {
>> RedirectorDataSet.dmbcllcRedirectRow row =
>>(RedirectorDataSet.dmbcllcRedirectRow)(redirectT able.Rows[rowIndex]);
>> if (row.Literal)
>> {
>> row.OldUrl = row.OldUrl.Replace("~/", appPath);
>> if (row.OldUrl.ToLower() == requestUrl.ToLower())
>> {
>> newURL = row.NewUrl;
>> redirect = row.Redirect301;
>> break;
>> }
>> }
>> else
>> {
>> row.OldUrl = row.OldUrl.Replace("~/",
>>Regex.Escape(appPath));
>> if (Regex.IsMatch(requestUrl, row.OldUrl,
>>RegexOptions.IgnoreCase))
>> {
>> newURL = Regex.Replace(requestUrl, row.OldUrl,
>>row.NewUrl, RegexOptions.IgnoreCase);
>> redirect = row.Redirect301;
>> break;
>> }
>> }
>> }
>>>
>> if (newURL != null)
>> {
>> newURL = newURL.Replace("~/", appPath);
>> if (newURL.ToLower() != requestUrl.ToLower())
>> {
>> if (redirect)
>> {
>> response.Status = "301 Moved Permanently";
>> response.AddHeader("Location", newURL);
>> response.End();
>> return;
>> }
>> else
>> {
>> response.ClearContent();
>> response.StatusCode = 200;
>> newURL = newURL.Replace(appPath, "~/");
>> HttpContext.Current.RewritePath(newURL);
>> }
>> }
>> }
>> }
>> public void Dispose()
>> {
>> }
>> }
>>>
>>}
>>>
>>----< end ----
>>>
>>-----Original Message-----
>>From: Eirik Eldorsen [mailto:eirik@increo.no]
>>Posted At: Monday, November 26, 2007 8:28 AM
>>Posted To: microsoft.public.dotnet.framework.aspnet
>>Conversation: How to 301 redirect default.aspx to root
>>Subject: Re: How to 301 redirect default.aspx to root
>>>
>>Thanks. I was hoping to find a solution without using ISAPI filter, but
>>I
>>guess that is the only option, or wait till IIS7 is available.
>>>
>>Eirik
>>>
>>"Juan T. Llibre" <nomailreplies@nowhere.comskrev i melding
>>news:ePYWQ8CMIHA.3852@TK2MSFTNGP06.phx.gbl...
>>>You don't have to issue a 301...
>>>>
>>>Your request sounds like a job for Ionic's ISAPI Rewrite Filter, but
>>>you'll only be able
>>>>
>>>
>>>
>>to use it on a server you control. Shared hosters seldom let you install
>>>
>>>ISAPI filters.
>>>>
>>>IIRF :
>>>
http://cheeso.members.winisp.net/IIRF.aspx
>>>>
>>>It's free.
>>>>
>>>To remove default.aspx from the URL, you'd use :
>>>>
>>>RewriteRule (.*)/default.aspx$ $1/ [I,RP]
>>>>
>>>>
>>>>
>>>>
>>>>
>>>Juan T. Llibre, asp.net MVP
>>>asp.net faq :
http://asp.net.do/faq/
>>>foros de asp.net, en espaņol :
http://asp.net.do/foros/
>>>======================================
>>>"Eirik Eldorsen" <eirik@increo.nowrote in message
>>>news:edCBwHCMIHA.820@TK2MSFTNGP06.phx.gbl...
>>>>Yeah I now how to 301 redirect. The problem is to do it with
>>>>default.aspx, without causing an infinite loop. The homepage has 2
>>url's
>>>>
www.eample.com/default.aspx and
www.example.com. I want to 301
>>redirect
>>>>anyone who get default.aspx in the url.
>>>>>
>>>>Request.RawUrl returns default.aspx in both cases, so i can't figure
>>out
>>>>how to check if the user has default.aspx in his url.
>>>>>
>>>>>
>>>>>
>>>>"Andrew Brook" <ykoorb@hotmail.comskrev i melding
>>>>news:%232pj3eBMIHA.3940@TK2MSFTNGP05.phx.gbl.. .
>>>>>If i recall correctly, can't you just set this up in IIS, i just
>>googled
>>>>>"301 redirect" and got
>>>>>
http://www.webconfs.com/how-to-redirect-a-webpage.php as the first
>>>>>link...
>>>>>>
>>>>>:)
>>>>>Andrew
>>>>>>
>>>>>"Eirik Eldorsen" <eirik@increo.nowrote in message
>>>>>news:ef1m%23WBMIHA.4272@TK2MSFTNGP05.phx.gbl. ..
>>>>>>How can I 301 redirect
www.example.com/default.aspx to
>>
www.example.com
>>>>>>without using ISAPI filters?
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>
>>>