在一个网站上使用 2 个域

Posted

技术标签:

【中文标题】在一个网站上使用 2 个域【英文标题】:Using 2 domains on one website 【发布时间】:2011-09-05 17:59:06 【问题描述】:

我有一个专用服务器(apache、phpmysql

有一个主域(我们称之为 www.domain1.com),它实际上保存所有文件,就像任何其他常规网络托管帐户一样。另一个域(称为 domain2.com)需要转发给它,但需要屏蔽。

所以domain2.com/filename.php、domain2.com/filename.php/432/r23-gjfdla-fdjslaf/都需要显示domain1.com的内容对应的内容,但是浏览器还是应该显示domain2.com而不是 domain1.com,并且它还必须能够被 $_SERVER['HTTP_HOST'] 检测到,这样我的服务器就知道使用哪个域来联系该网站。

这是因为我有 2 个合作客户,所以他们希望每个访问者保留他们输入的任何 URL 以进行独立演示,但使内容单方面,而不必同时更新两个站点。

【问题讨论】:

DocumentRoot /home/dangolub/public_html ServerName www.dangoluboff.ca ServerAlias www.charliecameron.com 我按照一些说明添加了上述行,但它不起作用。当输入 charliecameron.com 时,我只看到一个空白帐户的默认托管页面(“网站即将上线!”) 修改Apache配置并添加服务器别名时,是否重启了Apache进程(必须重启)? 【参考方案1】:
<VirtualHost *:80>
  DocumentRoot /www/example1
  ServerName www.domain1.com
  ServerAlias www.domain2.com
</VirtualHost>

【讨论】:

只是为了扩展,使用此设置,$_SERVER['SERVER_NAME'] 将显示 domain1,但 $_SERVER['HTTP_HOST'] 将显示 domain2。 您能解释一下 DocumentRoot 功能的作用吗?这必须适用于整个域及其所有 URL。它的一部分也是一个 Wordpress 设置... 我需要更多帮助。那么这会进入 domain1.com 端的 htaccess 文件吗?并且 domain2.com 应该被隐身(或屏蔽)转发到 domain1.com? 这转到 Apache 虚拟主机部分。 domain1 和 domain2 都是常规域。 啊该死...我不知道虚拟主机部分在哪里。 :(【参考方案2】:

您需要的是Virtual Host 功能 - 两个虚拟主机指向一个位置。

当然,页面的代码应该足够灵活以支持这一点 - 例如,内部 URL,如果是绝对的(带有 http://https:// 部分),也应该反映更改。但你可能已经知道了。

【讨论】:

是的,我在检测域、http 与 https 等的内部代码上没有遇到任何问题。现在另一个问题 - 我的两个域都使用 Google Apps。如果我设置自定义 MX 处理程序,这仍然不会相互影响,我希望? @jeffkee MX 记录不会影响负责将用户引导到正确服务器的记录(据我所知,ACNAME 记录)。 MX 记录负责将发送到您的域的电子邮件定向到正确的服务器。【参考方案3】:

我为同一家公司运营的几个小型网站做了非常相似的事情(一家公司,两家物业,每个都有自己的网站)。两者都在共享主机上,但您应该能够对 VirtualHosts 做同样的事情 - 只需定义两个 VirtualHosts,每个都有一个单独的域名,但每个都指向文件系统上完全相同的文档根目录:

<VirtualHost *:80>
    ServerName site1.com
    DocumentRoot /srv/www/public_html
</VirtualHost>

<VirtualHost *:80>
    ServerName site2.com
    DocumentRoot /srv/www/public_html
</VirtualHost>

我在public_html 目录中有index.php。这将检查$_SERVER['HTTP_HOST'] 以确定正在使用的域名。然后它设置一些具有适当目录位置的常量,以及访问数据库时使用的站点标志。

我有三个静态内容目录。一个是用于两个域的共享内容,另外两个是特定于站点的,包括徽标等内容。

其余的 PHP 脚本保存在文档根目录之外的单独脚本目录中。如有必要,脚本可以使用index.php 中定义的常量,例如绝对 URL 或其他特定于站点的信息。

/srv/www/
|
|--public_html
|  |
|  |--site1
|  |  |
|  |  |--css
|  |  |--images
|  |
|  |--site2
|  |  |
|  |  |--css
|  |  |--images
|  |
|  |--shared
|     |
|     |--css
|     |--images
|
|--scripts

如果您想要两个单独的文档根,只需创建两个单独的 index.php 文件,每个文件一个。然后他们都可以调用相同的公共代码库(在我的例子中是/srv/www/scripts/)。像这样的:

/srv/www/
|
|--site1
|  |
|  |--public_html
|     |
|     |--css
|     |--images
|   
|--site2
|  |
|  |--public_html
|     |
|     |--css
|     |--images
|
|--scripts

然后:

<VirtualHost *:80>
    ServerName site1.com
    DocumentRoot /srv/www/site1/public_html
</VirtualHost>

<VirtualHost *:80>
    ServerName site2.com
    DocumentRoot /srv/www/site2/public_html
</VirtualHost>

【讨论】:

【参考方案4】:

只需编辑 domain2.com 上的 DNS 以指向 domain1.com 的相同名称服务器记录。只要您网站上使用的文件没有硬编码到特定域,它就会自动使用掩码。

【讨论】:

【参考方案5】:

当您说“常规网络托管帐户”时,我假设是共享托管。如果是这样,您必须尝试使用​​ .htaccess 方法,而不是使用您甚至可能无法访问的虚拟主机功能:

已经有一个问题:.htaccess redirect one domain to another incliuding specific query string

希望它有所帮助。 :-)

【讨论】:

那是关于进行重定向,因此浏览器会主动从另一个域中挑选内容,如果我没看错的话,这不是 OP 想要的。 @harke OP 想要将一个域的所有请求“转发”到另一个域,他提到他需要“屏蔽”。所以,我相信 .htaccess 会更简单。【参考方案6】:

如果您的 apache 服务器有 mod_proxy 可用,您可以使用它通过服务器而不是客户端将请求传递到其他域。

然后您可以通过使用P 标志在mod_rewriteRewriteRules 中使用它。

好处是你可以通过.htaccess控制这个:

RewriteRule (.*)\.(jpg|gif|png) http://images.example.com$1.$2 [P]

简单的P / proxy 标志示例。

您可以在 domain2 的文档根目录中放置一个 .htaccess,然后将所有请求代理到 domain1

RwriteRule ^(.*)$ http://domain1$1 [P]

【讨论】:

以上是关于在一个网站上使用 2 个域的主要内容,如果未能解决你的问题,请参考以下文章

如何使用通用 Django 代码库托管 50 个域/站点

在 1 个 IP 中托管 2 个网站 [关闭]

指向 Node.js 应用程序的多个网站,提取主机名

iis7设置ftp

包括跨多个域的 Greasemonkey 脚本

Webgl 跨域图像不起作用