Come si fa a rebase collegamenti ipertestuali e il contenuto in una pagina ASP.NET?
-
12-09-2019 - |
Domanda
Ho una pagina ASP.NET per gestire "404 pagina non trovata" E 'l'installazione configurando la sezione <customErrors>
nel mio file web.config e impostando la pagina di errore personalizzata per errori 404 in Gestione IIS.
Funziona come previsto per le pagine nella radice del mio sito web, ma non funziona in una sottodirectory del sito -. I collegamenti ipertestuali e il contenuto della mia pagina di errore personalizzata avere la base URL sbagliato
Tutti i link nella mia pagina di errore sono controlli lato server (runat = "server") e hanno i loro legami con la base "~ /".
Quando si naviga il sito con http://mysite/nosuchfolder/nosuchfile
il rendering della pagina con i link a pensare è essere servito dalla radice, piuttosto dalla nosuchfolder
e come tale tutti i link sono rotti nel browser come il browser sta basando collegamenti da nosuchfolder
.
C'è un modo per 'raccontare' la pagina ASP.NET per ri-BASE link in diversi cartella / nome del file?
Note:
- La maggior parte del modello di pagina è resa da una pagina master
- Io corro IIS6 e ho posto errore personalizzato 404 all'URL:
/error404.aspx
- Nel mio file web.config Ho configurato la sezione
<customErrors>
per reindirizzare a/error404.aspx
- Per aggirare il problema Sto usando il tag
<base>
HTML nella pagina, ma voglio evitare questo - Non voglio avere a cambiare tutti i miei "~ /" collegamenti basati su "/" o un basando in linea mod
Soluzione 2
L'articolo di Scott Gu sulla riscrittura degli URL mi ha messo sulla strada giusta (si fa per dire!) -. Grazie per la punta James
La risposta è quella di utilizzare Context.RewritePath(newPath)
Ecco il codice che uso nel mio pagina 404 -
protected override void Render(HtmlTextWriter writer)
{
string rebase = Server.UrlDecode(Request.ServerVariables["QUERY_STRING"]);
if (rebase.Length>10 && rebase.StartsWith("404;"))
{
try
{
rebase = new Uri(rebase.Substring(4)).AbsolutePath;
}
catch
{
rebase = "/";
}
finally
{
Context.RewritePath(rebase);
}
}
base.Render(writer);
Response.StatusCode = 404;
}
Per gestire pagine aspx nello stesso modo manca, c'è un ambiente in web.config
chiamato redirectMode
che si imposta ResponseRewrite
<customErrors mode="On" redirectMode="ResponseRewrite">
<error statusCode="404" redirect="~/error404.aspx" />
</customErrors>
In questo modo il comportamento predefinito di reindirizzare l'utente a ~/error404.aspx?aspxerrorpath=badfile
Nota: questa impostazione è una novità per gli ultimi service pack ASP.NET (ad esempio Framework 3.5 SP1)
Altri suggerimenti
Quando si imposta pagine di errore yoru custome UO, sta utilizzando il reindirizzamento o riscrittura degli URL? Il problema che si descrive è un problema comune in sede di attuazione riscrittura degli URL in ASP.NET. In sostanza, in URL riscrittura diventa chiaro al processore che URL da utilizzare durante l'analisi URL. Un numero, se articoli / messaggi sono stati scritti su come affrontare la questione.
http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx
http://searchengineland.com/url -rewriting-custom-error-pagine-in-aspnet-20-12234