E
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
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]
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 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.
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
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 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.
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]
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 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?
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]
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/
======================================
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?
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.
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/
======================================
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]
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/
======================================
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?