You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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需要明确接收所有子域的请求,配置通配符虚拟主机:

  1. 打开你的网站虚拟主机配置文件(通常路径为/etc/apache2/sites-available/your-domain.conf)
  2. 添加或修改以下配置:
    <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>
    
  3. 启用配置并重启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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 18:02:36