Apache2:尝试将子域映射到子目录

Apache2:尝试将子域映射到子目录

所以基本上我想要的是:sub.domain.com/任何事物-> domain.com/asub/任何事物

我对此有点陌生,也有点困惑。我做的第一件事是配置我的 DNS 设置,以便 sub.domain.com 使用 CNAME 转到 domain.com(A 记录和 IP 会更好吗?)

接下来我进入我的 VirtualHost 文件并有:

RewriteEngine on

RewriteCond %{HTTP_HOST} www.(.+) [NC]
RewriteRule ^/(.*) http://domain.com/$1 [R]

RewriteCond %{HTTP_HOST} ^sub.domain.com
RewriteRule ^/(.*) http://domain.com/asub/$1 [R]

因此,第一条规则是为了处理 www,并确保正确捕获它并且它能正常工作。

第二条规则是我为子域映射添加的,但它似乎没有起任何作用

答案1

由于您可以访问 apache 配置,我建议您使用单独的 vhosts;这可以防止重写/重定向中的循环。

您还必须转义匹配模式中的任何特殊字符。并正确锚定您的模式!

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

  RewriteEngine on
 #RewriteCond %{HTTP_HOST} ^www\. [NC]
  RewriteRule ^/(.*) http://example.com/$1 [R]

  RewriteCond %{HTTP_HOST} ^sub\.example\.com$
  RewriteRule ^/(.*) http://example.com/asub/$1 [R]
</VirtualHost>

<VirtualHost *:80>
  ServerName example.com
  DocumentRoot /var/www/htdocs
  ...
</VirtualHost>

该注释是经过深思熟虑的;取决于您是否希望 www. 或 sub. 与此处未涵盖的任何请求匹配,注释掉另一个,它将成为 anyelse.example.com 的默认值。

相关内容