如果您正在运行 *AMP,最好按照Thomas的建议在Apache中使用虚拟主机。您可以选择使用或不使用您所描述的重定向来实现此操作。
虚拟主机
最可能您会想要做 基于名称的虚拟主机,因为它是最容易设置的,而且只需要一个IP地址(因此也很容易在本地MAMP机器上进行设置和测试)。基于IP的虚拟主机在其他方面更好,但您必须为每个域名拥有一个IP地址。
这个维基百科页面讨论了区别,并链接到底部的一个良好的基本操作步骤,介绍如何创建基于名称的虚拟主机。
在您的本地机器上进行测试时,您还需要在/etc/hosts
中设置假的DNS名称以进行测试域名。例如,如果您在localhost上监听Apache并在您的Apache配置中设置了vhost1.test.domain和vhost2.test.domain,则只需将这些域名添加到/etc/hosts
中127.0.0.1行之后的localhost即可:
127.0.0.1 localhost vhost1.test.domain vhost2.test.domain
一旦您完成了对/etc/hosts
文件的编辑,并将基于名称的虚拟主机配置添加到您的Apache配置文件中,那就可以了。重新启动Apache,您的测试域名应该就能工作了。
使用mod_rewrite进行重定向
如果您想使用mod_rewrite进行重定向(以便user.example.com
没有直接托管,而是重定向到example.com/user
),那么您还需要进行RewriteCond来匹配子域并将其重定向:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^subdomain\.example\.com
RewriteRule ^(.*)$ http://example.com/subdomain$1 [R]
你可以将这个代码放在 .htaccess
文件中或者在你的主要 Apache 配置文件中。
对于每个想要重定向的子域名,你需要添加一对像最后两个规则那样的规则。或者,你可以在 RewriteCond 中捕获子域名,以便能够使用一个通配符规则来将 *.example.com 重定向到 example.com/
虚拟主机和重定向
最好是更加明确并设置每个你想监听的主机名的虚拟主机配置部分,并将每个主机名的重写规则放在其虚拟主机配置内部。如果可能的话,将这些东西放在 Apache 配置文件而不是 .htaccess
中总是更安全、更快的 -- .htaccess
会减慢性能,因为 Apache 不断地扫描文件系统寻找 .htaccess
文件并重新解析它们,而且它更不安全,因为用户可能把它们搞砸。
像下面这样,在你的 Apache 配置文件中的虚拟主机配置将是:
NameVirtualHost 127.0.0.1:80
<VirtualHost 127.0.0.1:80>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /www/siteroot
</VirtualHost>
<VirtualHost 127.0.0.1:80>
ServerName vhost1.example.com
RewriteEngine On
RewriteRule ^(.*)$ http://example.com/vhost1$1 [R]
</VirtualHost>
<VirtualHost 127.0.0.1:80>
ServerName vhost2.example.com
RewriteEngine On
RewriteRule ^(.*)$ http://example.com/vhost2$1 [R]
</VirtualHost>