Merge pull request #3703 from sbwalker/dev

add support for page not found functionality
This commit is contained in:
Shaun Walker 2024-01-31 10:03:40 -05:00 committed by GitHub
commit 4afc439169
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -23,6 +23,7 @@
@inject IServerStateManager ServerStateManager; @inject IServerStateManager ServerStateManager;
@inject ILocalizationManager LocalizationManager; @inject ILocalizationManager LocalizationManager;
@inject IAliasRepository AliasRepository; @inject IAliasRepository AliasRepository;
@inject IUrlMappingRepository UrlMappingRepository;
<!DOCTYPE html> <!DOCTYPE html>
<html lang="@_language"> <html lang="@_language">
@ -113,7 +114,10 @@
{ {
var url = WebUtility.UrlDecode(Context.Request.GetEncodedUrl()); var url = WebUtility.UrlDecode(Context.Request.GetEncodedUrl());
HandleDefaultAliasRedirect(alias, url); if (!alias.IsDefault)
{
HandleDefaultAliasRedirect(alias, url);
}
var site = SiteRepository.GetSite(alias.SiteId); var site = SiteRepository.GetSite(alias.SiteId);
if (site != null && (!site.IsDeleted || url.Contains("admin/site")) && site.Runtime != "Hybrid") if (site != null && (!site.IsDeleted || url.Contains("admin/site")) && site.Runtime != "Hybrid")
@ -134,23 +138,10 @@
page = PageRepository.GetPage(site.HomePageId.Value); page = PageRepository.GetPage(site.HomePageId.Value);
} }
// if (page == null || page.IsDeleted) if (page == null || page.IsDeleted)
// { {
// // page not found - look for url mapping HandlePageNotFound(site, page, route);
// var urlMapping = _urlMappings.GetUrlMapping(site.SiteId, route.PagePath); }
// if (urlMapping != null && !string.IsNullOrEmpty(urlMapping.MappedUrl))
// {
// url = (urlMapping.MappedUrl.StartsWith("http")) ? urlMapping.MappedUrl : route.SiteUrl + "/" + urlMapping.MappedUrl;
// return RedirectPermanent(url);
// }
// else
// {
// if (route.PagePath != "404")
// {
// return RedirectPermanent(route.SiteUrl + "/404");
// }
// }
// }
// if (site.VisitorTracking) // if (site.VisitorTracking)
// { // {
@ -248,30 +239,46 @@
private void HandleDefaultAliasRedirect(Alias alias, string url) private void HandleDefaultAliasRedirect(Alias alias, string url)
{ {
// redirect non-default alias // get aliases for site and tenant
if (!alias.IsDefault) var aliases = AliasRepository.GetAliases().Where(item => item.TenantId == alias.TenantId && item.SiteId == alias.SiteId);
// get first default alias
var defaultAlias = aliases.Where(item => item.IsDefault).FirstOrDefault();
if (defaultAlias != null)
{ {
// get aliases for site and tenant // redirect to default alias
var aliases = AliasRepository.GetAliases().Where(item => item.TenantId == alias.TenantId && item.SiteId == alias.SiteId); NavigationManager.NavigateTo(url.Replace(alias.Name, defaultAlias.Name), true);
// get first default alias }
var defaultAlias = aliases.Where(item => item.IsDefault).FirstOrDefault(); else // no default alias specified - use first alias
if (defaultAlias != null) {
defaultAlias = aliases.FirstOrDefault();
if (defaultAlias != null && alias.Name.Trim() != defaultAlias.Name.Trim())
{ {
// redirect to default alias // redirect to first alias
NavigationManager.NavigateTo(url.Replace(alias.Name, defaultAlias.Name), true); NavigationManager.NavigateTo(url.Replace(alias.Name, defaultAlias.Name), true);
} }
else // no default alias specified - use first alias
{
defaultAlias = aliases.FirstOrDefault();
if (defaultAlias != null && alias.Name.Trim() != defaultAlias.Name.Trim())
{
// redirect to first alias
NavigationManager.NavigateTo(url.Replace(alias.Name, defaultAlias.Name), true);
}
}
} }
} }
private void HandlePageNotFound(Site site, Page page, Route route)
{
// page not found - look for url mapping
var urlMapping = UrlMappingRepository.GetUrlMapping(site.SiteId, route.PagePath);
if (urlMapping != null && !string.IsNullOrEmpty(urlMapping.MappedUrl))
{
// redirect to mapped url
var url = (urlMapping.MappedUrl.StartsWith("http")) ? urlMapping.MappedUrl : route.SiteUrl + "/" + urlMapping.MappedUrl;
NavigationManager.NavigateTo(url, true);
}
else // no url mapping exists
{
if (route.PagePath != "404")
{
// redirect to 404 page
NavigationManager.NavigateTo(route.SiteUrl + "/404", true);
}
}
}
private string CreatePWAScript(Alias alias, Site site, Route route) private string CreatePWAScript(Alias alias, Site site, Route route)
{ {
return return