【问题标题】:How To Detect An Incoming Request (With PHP Script) From a CNAME Subdomain?如何检测来自 CNAME 子域的传入请求(使用 PHP 脚本)?
【发布时间】:2015-08-16 14:44:20
【问题描述】:

我们有一个简单的基于 php 的重定向应用程序。

这是一个例子:

spiderman.com/redirection/redirect-to-marvel/

php 脚本位于“redirection”文件夹中,假设它将上述链接重定向到 marvel.com

现在...

如果我想创建一个名为 try.superman.com 的完全不同的子域,该子域使用 CNAME 重定向到 spiderman.com/redirection/,这样如果我打开这个网址:

try.superman.com/redirect-to-marvel/ 它实际上会转发到 spiderman.com/redirection/redirect-to-marvel/ 这当然会转发到 ma​​rvel.com

简而言之,浏览器会显示 try.superman.com/redirect-to-marvel/(由于 CNAME),但是我如何在服务器端检测来自 CNAME 记录的传入请求,并路由它到正确的本地文件夹?

这里只是需要一些指导......

PHP 的 dns_get_record + htaccess 方向正确吗?

【问题讨论】:

    标签: php .htaccess redirect dns cname


    【解决方案1】:

    一个重要的区别是 CNAME 和重写/重定向(或虚拟主机)是完全不同的东西,经常会混淆。

    CNAME 是一个 DNS 实体,因此您可以有多个名称指向一个单一的地址。例如,bob.example.com 是位于 1.2.3.4 的主机。然后,您可以为 alice.example.com 创建一个 CNAME,指向 bob 进行 DNS 解析并返回相同的 IP 地址。

    重定向是一种 HTTP 方法,用于获取到达某个位置 (http://bob.example.com/index.html) 的请求,并向浏览器返回一条指令,以转到客户端浏览器显示的其他位置 (http://alice.example.com/somewhereelse.html)。

    重写是一种 HTTP 方法,用于获取到达某个位置的请求,对其进行更改,然后将其发送到应答服务器,而不必让客户端的浏览器知道它已发生。

    虚拟主机(vhost 等...同一个函数有不同的名称)是一种 HTTP 方法,它允许您通过查看请求使用的名称以不同的方式回答请求,通常通过检查每个请求中包含的 HTTP 主机标头。以上面为例:客户端请求http://alice.example.com,它通过 DNS 解析为 1.2.3.4,因为 alice 是 bob.example.com 的 CNAME。请求到达同一个 IP 地址 1.2.3.4,但在那里运行的 Web 服务器使用 /alice 而不是 /bob 下的内容来响应请求。

    希望有帮助

    【讨论】:

      【解决方案2】:

      如果您想使用 PHP,您通常会配置您的网络服务器,以将所有子域提供给某个虚拟主机,该虚拟主机通过路由 PHP 脚本运行所有请求,该脚本将执行重定向。像这样的:

      <?php
      $map = array(
          "try.superman.com" => array(
              "/redirect-to-marvel/" => "http://spiderman.com/redirection/redirect-to-marvel/",
          ),
      );
      if (isset($map[$_SERVER["HTTP_HOST"]]) {
          if (isset($map[$_SERVER["HTTP_HOST"]][$_SERVER["REQUEST_URI"]])) {
               header("Location: " . $map[$_SERVER["HTTP_HOST"]][$_SERVER["REQUEST_URI"]]);
               exit;
          }
      }
      header("Location: http://spiderman.com/404.php");
      

      还有很大的改进空间,包括仅使用 mod_rewrite(或与您的网络服务器等效,但我假设您在这里使用 Apache,因为您提到 .htaccess)来完成所有这些。

      使用 PHP,您可以灵活地查询数据库以获得正确的重定向。

      【讨论】:

      • 这是一个我之前没想到的好方向!非常感谢朋友!
      猜你喜欢
      • 2015-04-30
      • 1970-01-01
      • 1970-01-01
      • 2016-09-04
      • 2014-05-22
      • 2020-02-22
      • 1970-01-01
      • 2012-12-02
      • 2018-08-19
      相关资源
      最近更新 更多