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

Apache mod_rewrite子域名映射目录且地址栏不变配置故障排查

问题原因与修复方案

先排查基础配置

首先确认两个前置配置正常,这是子域名规则生效的前提:

  • images.example.com的DNS解析已指向你的服务器IP
  • Apache虚拟主机配置中,images.example.com的DocumentRoot和主域名一致,都指向public_html目录,否则你写在public_html下的.htaccess规则根本不会被子域名请求加载

规则逻辑问题修复

你当前的子域名测试规则存在重写死循环:所有请求(包括echo.php本身的请求)都会被匹配重写,触发Apache 500错误,表现为页面无响应。
以下是修复后的完整规则:

RewriteEngine on

# 根域名跳转www + 全局HTTP转HTTPS
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [NE,R=301,L]

RewriteCond %{HTTPS} off 
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [NE,R=301,L]

# 主域名www.example.com内部重写到v2021目录
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteCond %{REQUEST_URI} !^/v2021/
RewriteRule ^(.*)$ v2021/$1 [L]

# 子域名测试规则:转发到echo.php
RewriteCond %{HTTP_HOST} ^(.+?)\.example\.com [NC]
# 排除实际存在的文件/目录,避免echo.php自身被重写导致循环
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ echo.php?a=%1&b=$1 [L]

# 上线后替换成实际的images子域名规则即可
# RewriteCond %{HTTP_HOST} ^images\.example\.com [NC]
# RewriteCond %{REQUEST_URI} !^/images/
# RewriteRule ^(.*)$ images/$1 [L]

关键修改点说明

  1. 给www的重写规则新增了RewriteCond %{REQUEST_URI} !^/v2021/条件,避免已经重写到v2021的请求被二次匹配,防止循环
  2. 给子域名规则新增了文件/目录存在性判断,跳过真实存在的资源请求,彻底解决重写循环问题
  3. 所有域名匹配规则加了[NC]标记,不区分大小写匹配,避免域名大小写差异导致规则不触发

测试注意

测试前先清空浏览器缓存,301跳转是永久缓存,旧的错误规则会被缓存导致测试结果不准。如果仍然有异常,可以开启Apache的rewrite日志,查看具体的重写执行流程定位问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 16:54:03