Ich habe kürzlich eine Website auf ein neues CMS (Umbraco) migriert. Viele der Links haben sich geändert, aber sie können leicht korrigiert werden, indem in der URL nach Mustern gesucht wird. Daher möchte ich etwas schreiben, das auf die richtige Seite umleitet, wenn die alte nicht gefunden wird. Das Teil ist kein Problem.
Wie kann ich die angeforderte URL abrufen, nachdem der Browser auf meine benutzerdefinierte 404-Seite umgeleitet wurde? Ich habe versucht mit:
request.ServerVariables("HTTP_REFERER") 'sorry i corrected the typo from system to server.
Aber das hat nicht funktioniert.
Irgendwelche Ideen?
Die Website ist auf IIS 6.0. Wir haben die Verwendung von 301-Weiterleitungen in Betracht gezogen, aber wir haben keine Möglichkeit zu wissen, welche Seiten die Leute mit Lesezeichen versehen haben, und es gibt ein paar hundert Seiten, also ist niemand daran interessiert, die Zeit zu verschwenden, um die 301-Weiterleitungen zu erstellen.
Lösung des Problems
Ich mache im Grunde dasselbe, was Sie auf einer benutzerdefinierten 404-Fehlerbehandlungsseite fragen. Bei IIS 6 befindet sich die ursprüngliche URL in der Abfragezeichenfolge. Der folgende Code zeigt, wie Sie die ursprüngliche URL abrufen und den Benutzer dann weiterleiten. In meinem Fall wechselte ich von altem ASP zu neuem ASP.NET, sodass alle.asp-Seiten an.aspx-Seiten weitergeleitet werden mussten. Außerdem haben sich einige URLs geändert, sodass ich in der alten URL nach Schlüsselwörtern suche und weiterleite.
//did the error go to a.ASP page? If so, append x (for.aspx) and
//issue a 301 permanently moved
//when we get an error, the querystring will be "404;<complete original URL>"
string targetPage = Request.RawUrl.Substring(Request.FilePath.Length);
if((null == targetPage) || (targetPage.Length == 0))
targetPage = "[home page]";
else
{
//find the original URL
if(targetPage[0] == '?')
{
if(-1!= targetPage.IndexOf("?aspxerrorpath="))
targetPage = targetPage.Substring(15); //?aspxerrorpath=
else
targetPage = targetPage.Substring(5); //?404;
}
else
{
if(-1!= targetPage.IndexOf("errorpath="))
targetPage = targetPage.Substring(14); // aspxerrorpath=
else
targetPage = targetPage.Substring(4); // 404;
}
}
string upperTarget = targetPage.ToUpper();
if((-1 == upperTarget.IndexOf(".ASPX")) && (-1!= upperTarget.IndexOf(".ASP")))
{
//this is a request for an.ASP page - permanently redirect to.aspx
targetPage = upperTarget.Replace(".ASP", ".ASPX");
//issue 301 redirect
Response.Status = "301 Moved Permanently";
Response.AddHeader("Location",targetPage);
Response.End();
}
if(-1!= upperTarget.IndexOf("ORDER"))
{
//going to old order page -- forward to new page
Response.Redirect(WebRoot + "/order.aspx");
Response.End();
}
Keine Kommentare:
Kommentar veröffentlichen