如何将所有子域指向index.php

时间:2013-04-28 05:38:45

标签: apache .htaccess vhosts

我正在尝试托管用户个人资料页面附带唯一子域名的网站,例如username.sitename.com。我想要一个Apache / VirtualHost解决方案,用于指向* .sitename.com到sitename.com/index.php,我可以在那里分配,哪个子域带有一个配置文件页面,哪个会显示404错误。

请帮我设置.htaccess

2 个答案:

答案 0 :(得分:2)

您只需要正确的VirtualHost设置。

<VirtualHost *:80>
  ServerName example.com 
  ServerAlias *.example.com

  [...] 

</VirtualHost>

由于index.php位于DirectoryIndex中,因此无论调用哪个域,都会自动调用它。动态响应您通过$_SERVER['HTTP_HOST']变量访问所请求的主机。

答案 1 :(得分:0)

最好在httpd.conf文件(或包含的配置文件)中通过服务器级别的301重定向执行此操作。您可以在VirtualHost本身中设置重定向,而不是创建VirtualHost并使服务器使用每个域的.htaccess文件进行应答和过滤。

您可以使用mod_rewrite

执行此操作
<VirtualHost *>
  ServerName subdomain.example.com
  RewriteEngine on
  RewriteRule ^/(.*)$ http://example.com/index.php [L,R=301]
</VirtualHost>

<VirtualHost *>
  ServerName subdomain2.example.com
  RewriteEngine on
  RewriteRule ^/(.*)$ http://example.com/404.php [L,R=301]
</VirtualHost>

或者如果您正在运行mod_alias,则可以使用此功能:

<VirtualHost *>
  ServerName subdomain.example.com
  Redirect 301 / http://example.com/index.php
</VirtualHost>

<VirtualHost *>
  ServerName subdomain2.example.com
  Redirect 301 / http://example.com/404.php
</VirtualHost>