所以基本上我想要的是: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 的默认值。