如何用.htaccess实现伪目录重写,隐藏路径并限制服务器访问(非永久)
解决方案:Apache .htaccess 内部重写与访问控制
以下是完全符合你需求的根目录.htaccess配置,逐条解释规则逻辑:
# 开启重写引擎 RewriteEngine On # 禁止目录列表,防止泄露服务器文件结构 Options -Indexes # 1. 禁止直接访问真实目录(阻止用户绕过伪目录访问真实路径) RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+mech-platform-web/ [NC] RewriteRule ^ - [F,L] # 2. 禁止访问所有非伪目录的请求(确保只能通过/mech-platform/入口访问) RewriteCond %{REQUEST_URI} !^/mech-platform/ [NC] RewriteRule ^ - [F,L] # 3. 内部重写伪目录到真实目录,保留子路径与查询参数 # 匹配带子路径的伪目录请求(如/mech-platform/page/1) RewriteRule ^mech-platform/(.*)$ mech-platform-web/frontend/web/$1 [L,QSA] # 匹配伪目录根路径(如/mech-platform 或 /mech-platform/) RewriteRule ^mech-platform/?$ mech-platform-web/frontend/web/ [L,QSA]
规则说明
- URL保持不变:所有规则使用
[L]终止后续规则而非[R]重定向,属于Apache内部转发,浏览器地址栏始终显示伪目录路径;QSAQuery String Append确保所有查询参数如?id=100完整传递到真实目录。 - 严格访问控制:
- 第一条禁止规则通过匹配
THE_REQUEST用户原始请求行阻止直接访问真实目录,内部转发不会触发此条件; - 第二条规则拦截所有非伪目录的请求,直接返回403 Forbidden,彻底禁止访问服务器上其他任何内容。
- 第一条禁止规则通过匹配
- 非永久无缓存:无任何301/302重定向标记,浏览器不会缓存重写规则;删除
.htaccess后,伪目录本身不存在,Apache会返回404 Not Found。
前置要求
- 确保Apache已启用
mod_rewrite模块:- Debian/Ubuntu系统执行:
a2enmod rewrite,然后重启Apache - CentOS/RHEL系统修改
httpd.conf,确保LoadModule rewrite_module modules/mod_rewrite.so未被注释,重启Apache
- Debian/Ubuntu系统执行:
- 确保虚拟主机/全局配置中允许
.htaccess生效:<Directory "/path/to/your/htdocs"> AllowOverride All Require all granted </Directory>
内容的提问来源于stack exchange,提问作者trejder
相关产品推荐
相关产品推荐

