如果你正在运行* AMP,最好的办法就是做Thomas建议并在Apache中做虚拟主机。 您可以使用或不使用您描述的重定向来执行此操作。
虚拟主机
很可能你会想要做基于名称的虚拟主机 ,因为它最容易设置,只需要一个IP地址(因此也很容易在本地MAMP机器上设置和测试)。 基于IP的虚拟主机在其他方面更好,但您必须拥有每个域的IP地址。
这个维基百科页面讨论了如何在底部进行基于名称的虚拟主机的基本步骤的差异和链接。
在本地计算机上进行测试,您还必须在/ etc / hosts中为假测试域名设置虚假DNS名称。 即如果你有Apache侦听localhost并在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/ * - 但从安全角度来看,这对我来说真是太糟糕了。
一起,vhosts和重定向
最好更明确地为要监听的每个主机名设置虚拟主机配置部分,并将每个主机名的重写规则放在其虚拟主机配置中。 (将这种东西放在你的Apache配置中更安全,更快,而不是.htaccess,如果你可以帮助它。 - .htaccess会降低性能,因为Apache不断搜索.htaccess文件的文件系统并重新分析它们,以及它不太安全,因为这些可能会被用户搞砸。)
像这样,Apache配置中的vhost配置将是:
NameVirtualHost 127.0.0.1:80
# Your "default" configuration must go first
<VirtualHost 127.0.0.1:80>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /www/siteroot
# etc.
</VirtualHost>
# First subdomain you want to redirect
<VirtualHost 127.0.0.1:80>
ServerName vhost1.example.com
RewriteEngine On
RewriteRule ^(.*)$ http://example.com/vhost1$1 [R]
</VirtualHost>
# Second subdomain you want to redirect
<VirtualHost 127.0.0.1:80>
ServerName vhost2.example.com
RewriteEngine On
RewriteRule ^(.*)$ http://example.com/vhost2$1 [R]
</VirtualHost>