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

如何用.htaccess实现子域名无URL跳转的多目录映射?

解决方案

完全可以通过production目录下的.htaccess文件实现需求,无需额外在tool目录配置。以下是修正后的配置和思路:

问题分析

  1. 原根目录配置导致URL显示/wordpress,是因为规则触发了外部跳转(而非内部重写),通常是mod_dir的DirectorySlash机制在重写后自动补全斜杠并跳转,或者规则写法未明确内部重写逻辑。
  2. tool目录下的配置无效,是因为%{DOCUMENT_ROOT}指向本地文件系统路径,RewriteRule的替换目标如果用本地路径,Apache无法正确处理为URL重写,必须使用相对路径或基于网站根的路径。

修正后的.htaccess配置(放在production目录下)

# 开启重写引擎
RewriteEngine On

# 规则1:访问 sub.domain.com/tool 时,内部重写到 subfolder/subfolder1/subfolder2
# 排除实际存在的文件/目录,避免冲突
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^tool/(.*)$ subfolder/subfolder1/subfolder2/$1 [L]

# 规则2:访问根目录时,内部重写到 wordpress 目录
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^$ wordpress/ [L]

# 规则3:处理根目录下其他请求,内部重写到 wordpress 对应文件
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ wordpress/$1 [L]

关键说明

  • 禁止外部跳转:所有规则使用[L] flag,替换目标为相对路径(基于production目录),确保是内部重写,URL地址栏不会变化。
  • 优先级顺序:/tool的规则要放在最前面,避免被根目录的wordpress规则覆盖。
  • 排除真实文件/目录:通过RewriteCond %{REQUEST_FILENAME} !-f和!-d,确保实际存在的文件/目录不会被重写,避免冲突。
  • 清理无效配置:删除tool目录下的.htaccess,所有逻辑统一在根目录处理即可。

验证要点

  • 访问sub.domain.com:地址栏保持不变,实际加载production/wordpress下的内容。
  • 访问sub.domain.com/tool:地址栏保持不变,实际加载production/subfolder/subfolder1/subfolder2下的内容。
  • 访问sub.domain.com/tool/test.html:会加载production/subfolder/subfolder1/subfolder2/test.html(如果文件存在)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 12:58:37