【问题标题】:Domain masking/pointing to a directory of a web application?域屏蔽/指向 Web 应用程序的目录?
【发布时间】:2009-08-08 20:58:09
【问题描述】:

我构建了一个 LAMP 网络应用程序,让用户可以创建他们自己的个人资料页面,在那里他们可以上传他们的简历和作品集。个人资料的网址类似于

http://jobbank.com/user/johndoe

John Doe 注册了域名http://johndoefreelancer.com,他希望它指向http://jobbank.com/user/johndoe。任何访问 johndoefreelancer.com 的人都不应该知道它是由 http://jobbank.com/user/johndoe 驱动的。这意味着浏览器 url 应该持续显示地址,例如:

http://johndoefreelancer.com/aboutme(真的指向jobbank.com/user/johndoe/aboutme) http://johndoefreelancer.com/portfolio(真的指向jobbank.com/user/johndoe/portfolio)

此外,点击任何链接 [a href=""] 应该可以让您访问 johndoefreelancer.com,而不是让您访问 jobbank.com。

我的问题是,实现这一目标的最佳方法是什么?

我正在考虑: 1) 向用户说明如何使用屏蔽进行域转发

2) 指导用户填写用户档案信息中的$homeUrl字段,保存到数据库中

3) 在我的 PHP 代码中,如果 $homeUrl 存在,请将所有 [a href="$_SERVER['HTTP_HOST']"] 替换为 [a href="$homeUrl"]

这是正确的方法吗?有没有更好的办法?

【问题讨论】:

    标签: php url domain-mask


    【解决方案1】:

    另一种方法是告诉您的用户将他们的域指向您的 IP,并将它们设置为基于名称的虚拟主机。好处是:

    1. 用户设置然后使用屏蔽转发要容易得多(根据注册商,后者甚至可能无法实现)
    2. 您不必在 PHP 代码中处理 URL 重写。

    如果您不必为您的 URL 使用 /user/johndoe 前缀,这将更容易设置(您实际上并不需要,因为您可以在代码中进行域查找以确定用户 ID),但是前缀也可能 - 只是在这种情况下 mod_rewrite 设置必须更多地参与(您需要每个域都这样做)。

    【讨论】:

    • RE: #1 - 为此目的,CNAME dns 记录有什么问题?基于名称的虚拟主机在他正在寻找的那种使用方式下维护起来很麻烦,更不用说安全性将是一场噩梦。据我了解,他正在寻找一种自动化的方式来实现上述目标(无需他批准每一项)。
    • RE:/user/johndoe,我同意。无论域是如何设置的,都没有必要这样做。此处 +1,以上 -1 = 0。
    • 我的理解是 OP 的用户正在其他地方购买他们的域名。 CNAME 将如何提供帮助?基于名称的虚拟主机设置在 DNS 中很容易实现自动化;我不确定您所说的“安全噩梦”是什么意思 - OP 的用户不会以任何方式参与其中。这里唯一有点混乱的是 mod_rewrite 设置(如果他使用 /user/johndoe 方案)。
    • 作为所购买域的所有者,他们可以设置从其域指向另一个域的 CNAME 记录。例如。 sub.mydomain.com -> jobbank.com。拥有大量以自动化方式创建的虚拟主机 = 可能的性能损失。这种性能损失可能会被用于攻击。虚拟主机根本不应该以这种方式使用。一种更具可扩展性的方法是使用 mod rewrite,减去 /user/johndoe 方案,将这些请求重定向到单个受控入口点(在本例中为 php 脚本)。
    • CNAME 的唯一优点是让它指向例如。 www.domainname.tld。如果 domainname.tld 必须更改其 ip,这是一件好事,客户不必更改其 dns 设置。
    【解决方案2】:

    目前我能想到的唯一实用方法是:

    1. 在用户个人资料中添加一个字段 域名

    2. 告诉用户让 DNS 主机条目指向您的 IP(或您的主域名)

    3. 创建一个虚拟主机,它是您可能拥有的所有虚拟主机中的第一个。 (*)

    4. 在此虚拟主机中创建一个 index.php 脚本,该脚本在用户配置文件中查找请求的域名并显示页面。

    您可能需要为您在页面上打印的 url 实现一个开关。例如。如果您访问特殊索引页面,请使用 / 作为“base href”,在所有其他情况下 /user/username 是“base href”

    *) 如果 apache 收到一个它不知道的名称的请求(因为它没有服务器名称|虚拟主机的别名,它使用第一个虚拟主机作为后备。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-20
      • 1970-01-01
      • 2011-02-22
      • 2015-09-08
      • 2011-06-18
      • 2011-08-27
      • 1970-01-01
      • 2011-05-03
      相关资源
      最近更新 更多