请求非文化页面时强制文化/多重页面

时间:2017-04-25 09:01:19

标签: asp.net umbraco umbraco7

在我的Umbraco网站上,如果有人试图访问没有多语言部分的页面,是否可以强制重定向到所有页面的默认多语言页面?

以下是一个例子:

website.com/en/news
website.com/da/news

如果有人试图访问:

website.com/news

它应该重定向到默认的文化页面:

website.com/en/news

我猜这样的事情应该相当容易(因为我认为这是大多数用户想要的东西),但我无法弄清楚如何。

2 个答案:

答案 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的优势在于它只会针对找不到的内容运行,而不是像现在的解决方案那样在每个页面加载上运行,从而提高效率!

希望有所帮助!

:)