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

Ubuntu16.4下Apache虚拟主机访问错误显示其他站点内容问题

问题根因

访问内容错乱的核心原因有两个:

  • 初始配置中FIRSTWEBSITE.pl仅绑定了443端口(HTTPS服务),没有配置80端口(HTTP默认端口)的虚拟主机规则
  • Apache对同一监听端口的请求,会优先匹配请求头Host对应的ServerName/ServerAlias,如果没有任何虚拟主机规则匹配上该Host,就会把请求转发给该端口加载顺序最靠前的虚拟主机处理。你初始环境下80端口只有SECONDWEBSITE.pl的虚拟主机规则,所以直接输入firstwebsite.pl访问(默认走HTTP 80端口)时,请求会被直接交给第二个站点处理,返回第二个站的内容。
新增HTTP转HTTPS配置修正

你写的跳转逻辑方向是对的,但有几处需要调整,避免冗余和规则不生效问题:

  • 80端口下的这个虚拟主机所有请求都会被跳转到HTTPS,不会实际读取站点目录文件,不需要配置DocumentRoot参数
  • 重写规则末尾要加[R=301,L]标记,明确返回301永久重定向状态码,同时告知Apache匹配到这条规则后停止执行后续重写规则,避免规则冲突
  • 要提前启用Apache的rewrite模块,否则重写规则不会生效

修正后的80端口虚拟主机配置如下:

<VirtualHost *:80>
    ServerAdmin admin@example.com
    ServerName FIRSTWEBSITE.pl
    ServerAlias www.FIRSTWEBSITE.pl

    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</VirtualHost>
配置落地校验步骤

改完配置不要直接重启服务,按以下步骤操作避免服务异常:

  1. 先做配置语法校验,执行命令:
    apache2ctl configtest
    
    只有命令返回Syntax OK时才能继续后续操作,如果有报错根据提示修正配置即可。
  2. 确认虚拟主机配置已启用:Ubuntu下Apache的虚拟主机配置需要放在/etc/apache2/sites-available/目录下,通过a2ensite 配置文件名命令生成软链接到sites-enabled目录才会被加载,不要直接修改配置后跳过启用步骤。
  3. 启用rewrite模块(如果之前未启用):
    a2enmod rewrite
    
  4. 重载Apache服务让配置生效,优先用reload而不是restart,避免中断正在处理的请求:
    systemctl reload apache2
    
  5. 校验虚拟主机加载顺序:执行apache2ctl -S,查看输出的虚拟主机列表,确认80端口下同时存在FIRSTWEBSITE.pl和SECONDWEBSITE.pl两个虚拟主机条目,443端口下存在FIRSTWEBSITE.pl的条目,没有缺失。
  6. 测试访问前先清空浏览器缓存,301永久重定向会被浏览器本地缓存,之前的错误访问记录可能导致测试结果不准。

内容的提问来源于stack exchange,提问作者Mlody87

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 15:45:32