【发布时间】:2015-12-30 10:13:52
【问题描述】:
我的问题是 NginX anf if(我知道是否是邪恶的,但我需要使用它)。 我想在两个条件下重定向访问我网站的用户。如果他们的 IP 匹配并且 URL 正好是 www.domain.com
基础是我有一个具有 2 个 IP 和 2 个域的网络服务器。一种是英语,一种是当地语言。我想将具有本地 IP 的每个人重定向到本地域。 (从 domain.com 到 domain.hu)
到目前为止我所做的:我已经安装了带有 IP2Location 的 NginX,它的工作原理就像一个魅力。这是我的 nginx.conf 中的“if”部分
if ($ip2location_country_short ~ ^HU$)
{
set $my_var1 "${my_var1}B";
}
if ($request_uri ~ .*wonder*.*)
{
set $my_var1 "${my_var1}C";
}
if ($my_var1 = ABC)
{
#rewrite ^/(.*)$ http://www.domain.hu last;
}
我想要实现的是:使用一个名为 $my_var1 的变量并使用它来决定我是否需要重定向用户。我已将其设置为“A”在第 1 位。 在第一个条件中:如果用户来自匈牙利,则使 $my_var1 等于“AB”。接下来我要检查用户是否在浏览器中写入了 ENG 或 HU URL。如果他写了 www.domain.com 的确切 URL,我想重定向用户。如果他这样做了,那么我将我的 $my_var1 设置为“ABC”。在第三个 if 中,如果 $my_var1 的值等于“ABC”,则初始化重定向。
我的问题是:我不知道如何检查 URL。我在编写一个 PHP 文件以在进入站点后向我显示 $my_var1 的值时发现了这个问题,结果发现 $my_var1 os 的值始终只有“AB”。我没有检查网址。能否请您描述一下如何检查包含文本/等于某事的 URL
【问题讨论】:
-
but I need to use it我敢打赌你不会。由于您正在检查 request_uri 是否包含 wonde[r]* 并且还说他们必须请求确切的 urlwww.domain.com/,因此不清楚您要做什么 - 在逻辑上如何同时匹配这两个条件?目前,您也正是在“如果是邪恶的”警告不要这样做The only 100% safe things which may be done inside if in location context are return and rewrite last的情况下。 -
另外,显而易见的第一步是拥有 2 个服务器块 - 您应该将 整个 nginx 服务器配置放入问题中。
-
好吧,我正在尝试 google,request_uri 是我发现用来检查用户输入的 URL 的。主要目标只是将匈牙利的每个用户从 domain.com 重定向到 domain.hu。如果我只检查 IP,那么它会进入重定向圈并且无法工作。这就是为什么我会检查 URL 以重定向用户,前提是他来自匈牙利并且他写了错误的 URL (domain.com)。这个奇迹只是 domain.com 的一部分
-
我建议你不要这样做。例如。我住在西班牙,我的第一语言是英语 - 想访问
example.com并被无条件重定向到example.es真是令人气愤。真实的我无法访问英文版的godaddy's help pages 以链接到它们,而不会被重定向到西班牙语网站。如果您想将用户从 .com 重定向到 .hu,您可能应该在您的应用程序中执行此操作,并且前提是用户尚未以其他方式重定向(使用 cookie)。 您需要将整个配置放入问题中才能得到答案。 -
我不是网站的所有者,所以我不会决定客户想要什么,我只能给他一些提示。 :)
标签: url redirect if-statement nginx