在一个网站上使用2个域名

时间:2011-05-31 19:13:39

标签: php apache url dns

我有一个专用服务器(apache,php,mysql)

有一个主要域名(让我们称之为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以进行独立呈现,但是使内容单方面而不必一次更新两个站点。

6 个答案:

答案 0 :(得分:29)

<VirtualHost *:80>
  DocumentRoot /www/example1
  ServerName www.domain1.com
  ServerAlias www.domain2.com
</VirtualHost>

答案 1 :(得分:8)

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

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

答案 2 :(得分:6)

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

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

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

我在index.php目录中有public_html。这将检查$_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>

答案 3 :(得分:5)

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

答案 4 :(得分:4)

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

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

希望它有所帮助。 : - )

答案 5 :(得分:4)

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

然后,您可以使用mod_rewrite标记在RewriteRule P内使用它。

好处是您可以按.htaccess

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

简单P / proxy标志示例。

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

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