Rimozione dell'estensione .aspx da Sitecore in Execurequest Pipeline
-
21-12-2019 - |
Domanda
Attualmente sto cercando di rimuovere le estensioni .aspx dagli URL di Sitecore.Un blog suggerisce che la modifica del seguente risolverebbe questo problema:
<add name="sitecore" type="Sitecore.Links.LinkProvider, Sitecore.Kernel" addAspxExtension="true"
.
Il problema è che ciò non funziona per tutti i codici nei nostri siti Web poiché alcuni controlli personalizzati forzano l'utilizzo di .aspx.
Quello che pensavo è che se posso entrare nella tubazione prima che venga inviata una risposta all'utente di poter cambiare l'URL in uno che è più amichevole SEO (no .aspx), sto cercando di fare questo usandoil seguente codice
public class CustomExecuteRequest : Sitecore.Pipelines.HttpRequest.ExecuteRequest
{
protected override void PerformRedirect(string url)
{
base.PerformRedirect(url.Replace(".aspx" , ""));
}
public override void Process(Sitecore.Pipelines.HttpRequest.HttpRequestArgs args)
{
PerformRedirect(args.Url.FilePathWithQueryString.Replace(".aspx", ""));
//args.Url.FilePathWithQueryString = args.Url.FilePathWithQueryString.Replace(".aspx", "");
//base.Process(args);
}
}
.
Il codice è colpito e questa soluzione funziona, tuttavia si sta eseguendo un reindirizzamento che non è proprio quello che voglio fare, preferirei solo avere una richiesta regolare con l'URL pulito.Il problema è che la variabile ARGS ha un campo di sola lettura (commentato di seguito) che viene utilizzato per creare effettivamente l'URL.
Qualcuno ha idee su come posso cambiare l'URL qui, o forse da qualche altra parte nella tubazione?
Soluzione
Cosa stai facendo all'interno della httprequestpipeline non è certamente il modo corretto per cambiare i collegamenti.Come con qualsiasi applicazione Web, eventuali collegamenti nella pagina vengono restituiti al client come contenuto della richiesta HTTP.Reindirizzamento durante la richiesta non cambierà il contenuto reso.
L'unico modo per farlo è il modo più duro:
- .
- Trova tutti i luoghi della tua fonte che genera i link contenenti .aspx.Una ricerca per "Aspx" all'interno della soluzione potrebbe aiutare
- Trova tutti i riferimenti a urloptions e a LinkManager e controlla se addspxextension= true è impostato manualmente come urnoptions.
Qualcosa come questo produrrebbe sempre un finale .aspx ad esempio:
var urlOptions = UrlOptions.DefaultOptions;
urlOptions.AddAspxExtension = true;
LinkManager.GetItemUrl(item, urlOptions);
. Altri suggerimenti
O il modo difficile di modificare tutti i tuoi collegamenti per utilizzare Link Manager o se sei legato per il tempo, suggerisci qualcosa forse al di fuori di Sitecore e utilizzare il modulo IIS UrlRewrite.