在一个网站上使用 2 个域
Posted
技术标签:
【中文标题】在一个网站上使用 2 个域【英文标题】:Using 2 domains on one website 【发布时间】:2011-09-05 17:59:06 【问题描述】:有一个主域(我们称之为 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 以进行独立演示,但使内容单方面,而不必同时更新两个站点。
【问题讨论】:
<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 处理程序,这仍然不会相互影响,我希望? @jeffkeeMX
记录不会影响负责将用户引导到正确服务器的记录(据我所知,A
和 CNAME
记录)。 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_rewrite
RewriteRule
s 中使用它。
好处是你可以通过.htaccess
控制这个:
RewriteRule (.*)\.(jpg|gif|png) http://images.example.com$1.$2 [P]
简单的P
/ proxy
标志示例。
您可以在 domain2 的文档根目录中放置一个 .htaccess,然后将所有请求代理到 domain1:
RwriteRule ^(.*)$ http://domain1$1 [P]
【讨论】:
以上是关于在一个网站上使用 2 个域的主要内容,如果未能解决你的问题,请参考以下文章