重定向问题

时间:2011-03-03 19:43:51

标签: c# asp.net global-asax

假设我有一个网站www.mysite.com,我希望它是一个多语种网站。以下是我想要达到的目标: -

1。当用户访问我的网站时,我想获取用户所在国家/地区的ISO代码。假设ISO是“FR”。    现在我希望用户被重定向到www.mysite.fr

如果无法获取ISO地址,用户将被重定向到www.mysite.com

现在我使用了这个网站http://ipaddressextensions.codeplex.com/中的dll并使用了他们的方法   iso3066code()。但我无法根据用户的IP地址获取ISO代码。无论如何,获取ISO代码的最佳方法是什么?

2. 我有一个针对不同国家/地区的不同主页。像法国一样有France.master,德国有德国.master等。    我想要的是首先应该提取用户的ISO代码,然后应该将用户重定向到与ISO对应的站点    并希望相应的主加载。

这是一个场景: -

来自法国的用户输入“www.mysite.com”打开我的网站。现在我想用法语向用户显示我的网站的内容,所以我希望他被重定向到 “www.mysite.fr”并希望France.master加载所有页面。我正在做的是检查用户输入的“顶级域名”,在这种情况下是“com”,然后我获取ISO代码  然后,如果ISO存在,用户将被重定向到“www.mysite.fr”

例如,ISO无法获取,“www.mysite.com”将仅为用户打开。

3. 如何重定向用户? Response.Redirect(“http://www.mysite.fr”)失败并出现如下错误: -

“页面未正确重定向”我尝试将其更改为Response.Redirect(“http://www.mysite.fr”,false)     和Response.Redirect(“http://www.mysite.fr”,true)。这没用。

4. www.mysite.com和www.mysite.fr不是两个不同的网站。只要它是www.mysite.com,英文内容将在网站上显示。    当它是“www.mysite.fr”时,可以在网站内看到法语内容。

我做的是: -

在Global.asax文件中: -

我尝试使用网站ipaddressextensions上面的dll获取ISO代码。然后我在Global.asax文件中创建了这个Application(“UserISO”)变量。((这是一个很好的方法吗?)) 我需要制作它,因为我想在我的全局文件本身中使用这个全局变量。在一些用户定义的方法中。  然后我在cookie中设置母版页名称,并使用此cookie动态更改Page_PreInit()事件中每个内容页面的母版页。 最后我用“Response.Redirect(”http://www.mysite.fr“,false)重定向用户”。这个response.redirect不起作用!

现在,我在正确的道路上?我对如何让它真正起作用感到非常困惑! :( 多语言网站如何重定向用户?我在哪里可以了解这一切?我尝试过并试过但是这样做不行!

最后,截至目前,该网站并未设置任何域名。使用IIS中设置的IP地址运行它。 那么我该如何测试我的网站呢。我该怎么做呢。我是否遵循了正确的方法?

请指引我走正确的道路。任何帮助将不胜感激。谢谢!

3 个答案:

答案 0 :(得分:2)

比利时有3种官方语言,仅通过查看IP地址或域名就无法找到我的语言。

查找访问者语言的最佳方法是检查浏览器的语言。您可以在Request.Userlanguages中找到它。

答案 1 :(得分:1)

不要这样做。当你试图假设用户说的语言时,这真的很令人沮丧。你最终会被某人弄错。在主页上放置一些小旗图标或语言名称选项,置身于一个非常明显的位置,让访问者选择他们想要浏览的网站/语言。

Facebook的主要登录页面就是一个很好的例子。

编辑:您可能做的最好的事情是使用HTTP1.1 Header Accept-Language作为提示,但即便如此,我认为您应该推迟对项目的这一要求。

答案 2 :(得分:0)

您收到重定向错误,因为.fr站点可能与.com站点相同,但会话cookie仅对某个域有效,这意味着也会在重定向上调用Session_OnStart()。避免这种情况的一种方法是以某种方式覆盖重定向/ ip-lookup,可以发送查询字符串或您可以识别的特定登录页面:

www.site.fr/?overrideredirect=true www.site.fr/redirected.aspx - >然后重定向回到Session_OnStart

之后

为了选择正确的母版页,您可以识别所请求的主机以及global.asax中的覆盖母版页,也许是在BeginRequest事件中。