Apache+PHP环境下多子域指向同一目录的.htaccess配置求助
解决多子域指向同一目录的问题
你的问题核心是DNS解析和Apache虚拟主机未正确配置,导致除已配置的site.domain.com外,其他子域根本无法被服务器识别,.htaccess规则自然无法生效。以下是分步解决方案:
1. 配置通配符DNS A记录
所有子域要能访问,首先得让DNS解析到你的服务器。需要在域名管理后台添加通配符A记录:
- 主机记录填
* - 记录类型选
A - 记录值填你的服务器公网IP
这样site1.domain.com、site2.domain.com等任意子域都会解析到服务器,不会再出现“网站不存在”的提示。
2. 配置Apache通配符虚拟主机
Apache需要明确接收所有子域的请求,配置通配符虚拟主机:
- 打开你的网站虚拟主机配置文件(通常路径为
/etc/apache2/sites-available/your-domain.conf) - 添加或修改以下配置:
<VirtualHost *:80> ServerName domain.com ServerAlias *.domain.com # 匹配所有子域 DocumentRoot /var/www/html # 这里填你的网站根目录(包含www/site的上级目录) <Directory /var/www/html> AllowOverride All # 必须开启,让.htaccess规则生效 Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/domain-error.log CustomLog ${APACHE_LOG_DIR}/domain-access.log combined </VirtualHost> - 启用配置并重启Apache:
sudo a2ensite your-domain.conf sudo systemctl restart apache2
3. 修正.htaccess规则
确保规则逻辑正确且路径无误,优化后的规则如下(放在网站根目录的.htaccess中):
RewriteEngine On # 排除主域和www子域,只处理其他子域 RewriteCond %{HTTP_HOST} !^(www\.)?domain\.com$ [NC] # 匹配任意子域格式 RewriteCond %{HTTP_HOST} ^([^.]+)\.domain\.com$ [NC] # 将请求重写到site目录 RewriteRule ^(.*)$ /site/$1 [L]
- 确认
/site目录存在于你的网站根目录下,且Apache用户(如www-data)有读取权限。
4. 权限检查
确保site目录及其文件的权限正确:
sudo chown -R www-data:www-data /var/www/html/site sudo chmod -R 755 /var/www/html/site sudo chmod 644 /var/www/html/site/*.php
内容的提问来源于stack exchange,提问作者Pawciok
相关产品推荐
相关产品推荐

