Apache2虚拟主机DocumentRoot通配符重写需求
实现*.abc.net到对应*.xyz.org DocumentRoot的重写方案
没问题,我来帮你搞定这个Apache通配符子域名的重写需求!下面是一步步的具体实现步骤:
1. 确保启用必要的Apache模块
首先得确认mod_rewrite模块已经启用,这是URL重写的核心模块。如果还没启用,执行以下命令:
sudo a2enmod rewrite sudo systemctl restart apache2
2. 修改虚拟主机配置
找到你管理通配符子域名的虚拟主机配置文件(通常位于/etc/apache2/sites-available/目录下,比如命名为wildcard.conf),针对*.abc.net的虚拟主机块添加重写规则:
<VirtualHost *:80> ServerName abc.net ServerAlias *.abc.net # 开启重写引擎 RewriteEngine On # 捕获*.abc.net中的子域名部分(比如sub.abc.net里的sub) RewriteCond %{HTTP_HOST} ^([a-z0-9-]+)\.abc\.net$ [NC] # 将请求重定向到对应*.xyz.org的DocumentRoot路径 RewriteRule ^(.*)$ /var/www/domains/%1.xyz.org/httpdocs$1 [L] # 如果你需要支持HTTPS,请在443端口的虚拟主机配置中添加相同的重写规则 </VirtualHost>
规则说明:
RewriteCond %{HTTP_HOST} ^([a-z0-9-]+)\.abc\.net$ [NC]:匹配所有以.abc.net结尾的子域名,用%1捕获子域名前缀(比如sub),[NC]表示匹配时不区分大小写。RewriteRule ^(.*)$ /var/www/domains/%1.xyz.org/httpdocs$1 [L]:把用户请求的URI(比如/index.php)拼接成对应的*.xyz.org目录路径,[L]表示这是最后一条执行的规则,避免后续规则干扰。
3. 验证目录权限
确保Apache的运行用户(通常是www-data)对目标目录有读取权限,否则会出现403错误:
sudo chown -R www-data:www-data /var/www/domains sudo chmod -R 755 /var/www/domains
4. 重启Apache生效配置
最后重启Apache服务,让新的配置生效:
sudo systemctl restart apache2
这样配置完成后,当用户访问http://sub.abc.net时,Apache会自动读取/var/www/domains/sub.xyz.org/httpdocs下的内容,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Pankaj Gupta
相关产品推荐
相关产品推荐

