
本文介绍如何使用 apache 的 mod_rewrite 模块,通过 .htaccess 文件将形如 `https://example.com/html/mypage` 的真实路径,对外显示为简洁的 `https://example.com/mypage`,实现“隐藏子目录”的伪静态效果。
要实现 URL 中不显示 /html/ 子目录,同时仍能正确加载对应页面,核心在于启用 mod_rewrite 并配置精准的重写规则。以下为完整、安全、可扩展的实现方案:
✅ 基础配置(推荐)
在网站根目录(即 public_html 或 htdocs)下的 .htaccess 文件中添加以下内容:
# 启用重写引擎
RewriteEngine On
# 将 /mypage 映射到 /html/mypage.html(支持 .html 扩展名)
RewriteRule ^mypage$ /html/mypage.html [L]
# 若需支持无扩展名访问(如 mypage → mypage.html),可配合 DirectoryIndex 或显式重写
# 更通用的做法:匹配所有非 html/css/js 等静态资源的请求,尝试在 /html/ 下查找同名文件
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ /html/$1 [L]⚠️ 关键注意事项:
- [L] 表示“Last”,即此规则匹配后停止后续规则处理,避免冲突;
- 确保服务器已启用 mod_rewrite(绝大多数共享主机默认开启);
- .htaccess 文件必须保存为 UTF-8 无 BOM 格式,且权限建议设为 644;
- 若页面实际为 mypage.php,请将规则中的 mypage.html 替换为 mypage.php;
- 浏览器可能缓存 301 重定向,请测试时使用无痕模式或清除缓存。
? 进阶技巧:批量映射多个页面
若需对 /html/ 下多个页面统一隐藏目录,可使用通配规则(需确保无命名冲突):
# 示例:将 /about /contact /blog 等直接指向 /html/ 对应文件(优先匹配真实文件)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/html/$1 -f
RewriteRule ^(.+)$ /html/$1 [L]
# 可选:为 SEO 友好,对直接访问 /html/xxx 的请求 301 重定向至干净 URL
RewriteCond %{THE_REQUEST} \s/html/([^\s]+) [NC]
RewriteRule ^ /%1 [R=301,L,NE]? 总结:URL 重写不是重定向(不改变地址栏行为),而是内部映射。上述规则让服务器“悄悄”从 /html/ 目录读取资源,而用户始终看到简洁 URL——这是构建专业、可维护网站 URL 架构的基础实践。










