站点子部分的多个域

时间:2011-01-19 05:38:30

标签: php apache .htaccess mod-rewrite dns

这是交易。基本上我有多个域名,我希望其中一个域名指向网站的常规基础,但其他域名指向网站的子部分没有修改网址地址栏。我们的想法是,每个额外的域都为其部分打上了品牌。

例:
www.domain.com网站顶级
www.domain2.com指向www.domain.com/abc
www.domain3.com指向www.domain.com/def

另请注意,在示例中,'abc'和'def'不是文件系统上的真实目录,而是数据库中定义的虚拟区域。

我花了很多时间环顾四周,却找不到适合自己的东西。我想要使用域名伪装,因为它使用了框架。常规重定向显然很容易指向正确的东西,但它们会更改地址栏中的URL。

有没有办法实现这个目标?

修改
我已经添加了下面标记为Mark的别名,但是有人能说明我如何使用mod_rewrite来实现这个功能吗?

1 个答案:

答案 0 :(得分:5)

首先,您的DNS记录需要指向Web服务器的IP。

其次,您必须设置Apache以从同一个VirtualHost服务多个域。启用mod_alias,然后在VirtualHost定义中使用ServerAlias指令。例如:

ServerName www.domain.com
ServerAlias domain.com www.domain2.com domain2.com www.domain3.com domain3.com

如果您已正确完成,则应在每个域中看到完全相同的内容,而不进行任何重定向。

您接下来要做的是架构决策。您可以使用mod_rewrite基于域对URL路由规则进行硬编码,或者您可以使用PHP根据$ _SERVER ['HTTP_HOST']的值进行路由。

mod_rewrite解决方案可能涉及向.htaccess文件添加类似的内容:

RewriteEngine On

RewriteCond %{HTTP_HOST} domain2\.com$
RewriteRule ^(.*)$ /abc/$1 [L]

RewriteCond %{HTTP_HOST} domain3\.com$
RewriteRule ^(.*)$ /def/$1 [L]

这是一个高级概述。如果您需要有关该过程特定部分的详细信息,请评论我的答案。