How to 301 redirect default.aspx to root

E

Eirik Eldorsen

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.
 
D

Dave Bush

I use request.Url.AbsoluteUri which seems to work fine unless I pass a
parameter in the query string.

-----Original Message-----
From: Eirik Eldorsen [mailto:[email protected]]
Posted At: Monday, November 26, 2007 6:46 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

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.
 
E

Eirik Eldorsen

I've tested your sugestion. I get the same problem:
If I write Response.Write(Request.Url.AbsoluteUri ) in the pageload of
Default.aspx i get http://www.example.com/deafult.aspx even if the url in
the browser says www.example.com


Dave Bush said:
I use request.Url.AbsoluteUri which seems to work fine unless I pass a
parameter in the query string.

-----Original Message-----
From: Eirik Eldorsen [mailto:[email protected]]
Posted At: Monday, November 26, 2007 6:46 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

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 said:
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
 
J

Juan T. Llibre

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]
 
E

Eirik Eldorsen

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 said:
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]






Eirik Eldorsen said:
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.
 
D

Dave Bush

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.PathAndQuery, "");
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)(redirectTable.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:[email protected]]
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 said:
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]






Eirik Eldorsen said:
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.
 
T

ThatsIT.net.au

am I missing something?

would a few lines like this do?


Dim url As String = Request.ServerVariables("URL")
If InStr(url, "default.aspx") <> 0 Then
Response.Redirect("/")
End If


Dave Bush said:
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.PathAndQuery, "");
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)(redirectTable.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:[email protected]]
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 said:
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]






Eirik Eldorsen said:
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" <[email protected]> skrev i melding
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

How can I 301 redirect www.example.com/default.aspx to www.example.com
without using ISAPI filters?
 
J

Juan T. Llibre

Yes, that's what I initially thought, too, but ran into a wall.

Have you actually tested that ?
IIRC, when I tried somthing similar, with InStr, I ended up in an endless redirect loop.






ThatsIT.net.au said:
am I missing something?

would a few lines like this do?


Dim url As String = Request.ServerVariables("URL")
If InStr(url, "default.aspx") <> 0 Then
Response.Redirect("/")
End If


Dave Bush said:
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.PathAndQuery, "");
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)(redirectTable.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:[email protected]]
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 said:
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]






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" <[email protected]> skrev i melding
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

How can I 301 redirect www.example.com/default.aspx to www.example.com
without using ISAPI filters?
 
T

ThatsIT.net.au

Juan T. Llibre said:
Yes, that's what I initially thought, too, but ran into a wall.

Have you actually tested that ?
IIRC, when I tried somthing similar, with InStr, I ended up in an endless
redirect loop.

Yes I did test it it worked fine, thats why I asked if I was missing
something.
Try It again maybe you made a simple error because its working for me

ThatsIT.net.au said:
am I missing something?

would a few lines like this do?


Dim url As String = Request.ServerVariables("URL")
If InStr(url, "default.aspx") <> 0 Then
Response.Redirect("/")
End If


Dave Bush said:
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.PathAndQuery, "");
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)(redirectTable.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:[email protected]]
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" <[email protected]> skrev i melding
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]






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" <[email protected]> skrev i melding
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

How can I 301 redirect www.example.com/default.aspx to
www.example.com
without using ISAPI filters?
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,534
Members
45,008
Latest member
Rahul737

Latest Threads

Top