在我的Umbraco网站上,如果有人试图访问没有多语言部分的页面,是否可以强制重定向到所有页面的默认多语言页面?
以下是一个例子:
website.com/en/news
website.com/da/news
如果有人试图访问:
website.com/news
它应该重定向到默认的文化页面:
website.com/en/news
我猜这样的事情应该相当容易(因为我认为这是大多数用户想要的东西),但我无法弄清楚如何。
答案 0 :(得分:0)
所以我最终做了一个糟糕的修复,直到我得到一个更好的回答"。它是这样的:
var culture = HttpContext.Current.Request.Url.AbsolutePath.Split('/')[1];
if (culture != "en" && culture != "da")
{
var shortCulture = "en";
var languages = HttpContext.Current.Request.UserLanguages;
//Just making sure
if (languages != null && languages.Length > 0)
{
shortCulture = languages[0].Trim().Substring(0, 2);
//If the culture is something like fr (French), we default back to en
if (shortCulture != "en" && shortCulture != "da")
{
shortCulture = "en";
}
}
Uri uri = new Uri(HttpContext.Current.Request.Url.AbsoluteUri);
var url = uri.Scheme + Uri.SchemeDelimiter + uri.Host;
url += "/" + shortCulture + HttpContext.Current.Request.Url.AbsolutePath;
Response.RedirectPermanent(url);
}
基本上,如果我尝试请求:
https://website.com/news
http://website.com/news
website.com/news
http://website.com/news/some-news-article/
etc. etc.
它会重定向。例如:
https://website.com/news/
|
V
https://website.com/en/news/
(这取决于你的语言环境)。
可怕,可怕,可怕。我很惭愧。
答案 1 :(得分:0)
好的,所以在Umbraco 7中,您可以使用ContentFinder执行此操作。这是内容管道的一部分,它将尝试找到Umbraco自己无法找到的内容。
内容查找器有两个部分,实际的ContentFinder本身,然后你必须在Umbraco的应用程序启动事件中连接它。
我实际上做了类似于你正在尝试但反过来的事情(我的所有内容都在/内容中,但我使用/ en-en / content等虚拟网址并将所有内容映射到内容发现者。)
有关ContentFinder的信息,请查看文档:{{3}}
以下是我发现的一个主要内容:https://our.umbraco.org/documentation/reference/routing/request-pipeline/icontentfinder
ContentFinder的优势在于它只会针对找不到的内容运行,而不是像现在的解决方案那样在每个页面加载上运行,从而提高效率!
希望有所帮助!
:)