让虚拟主机正确重定向通配符子域名

让虚拟主机正确重定向通配符子域名

我试图在我的服务器上实现三件事:

  1. cat.mydomain.com 应该指向 /home/www/
  2. *.mydomain.com 应该指向 /home/www/project/web/
  3. *.mydomain.com/indexed/ 应该指向 /home/www/indexed/

为此,我设置了一个 httpd-vhosts.conf 文件,其规则如下:

    NameVirtualHost *:80

<VirtualHost *:80>
    ServerName cat.mydomain.com
    ServerAlias cat.mydomain.com
    DocumentRoot /home/www/
</VirtualHost>

<VirtualHost *:80>
    ServerName *.mydomain.com/indexed/
    ServerAlias *.mydomain.com/indexed/
    DocumentRoot /home/www/indexed/
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot /home/www/project/web/
    ServerName *.mydomain.com
    ServerAlias *.mydomain.com
</VirtualHost>

其中两个工作正常,cat.mydomain.com 指向 /home/www/,而 *.mydomain.com 指向 /home/www/project/web/,但这显然不是重定向目录 *.mydomain.com/indexed/ 的正确方法,因为这样做不起作用。我该如何让它工作?vhost 部分是执行此操作的正确位置吗?还是应该在 .htaccess 文件中执行此操作?

答案1

不同于服务器别名服务器名称不能包含通配符,所以这

ServerName *.mydomain.com

完全是错误的。另外,阅读 ServerName 的文档会显示以下语法

句法ServerName [scheme://]fully-qualified-domain-name[:port]

所以

ServerName *.mydomain.com/indexed/

也是错误的。您还应该检查一下 ServerAlias 的语法,因为在某些情况下您也会犯这样的错误。

你应该看看别名指令。在您的 vhost 定义中,合适的别名应该可以满足您的要求。

相关内容