如何通过.htaccess禁止直接访问public目录,仅支持根路径访问资源?
禁止直接访问/public目录的.htaccess配置方案
直接修改你根目录下的.htaccess文件,添加拦截规则即可实现需求:
<IfModule mod_rewrite.c> RewriteEngine On # 拦截所有直接访问/public路径的请求,返回403禁止访问 RewriteCond %{THE_REQUEST} \s/+public/ [NC] RewriteRule ^ - [R=403,L] # 保留原有规则,将合法请求内部转发至public目录 RewriteRule ^(.*)$ public/ [L] </IfModule>
规则说明
RewriteCond %{THE_REQUEST} \s/+public/ [NC]:通过%{THE_REQUEST}变量检查用户的原始请求行(内部重写不会修改这个变量),判断是否存在直接访问/public/的行为。[NC]标记表示不区分大小写,覆盖所有大小写变体的请求。RewriteRule ^ - [R=403,L]:如果命中上面的条件,直接返回403 Forbidden错误响应,[L]标记终止后续规则执行,避免冲突。如果想返回404 Not Found,只需将R=403改为R=404。- 原有重写规则保持不变,负责将不带
/public前缀的合法请求内部转发到实际的public目录处理。
注意事项
确保你的Apache服务器已经启用mod_rewrite模块,并且在站点配置中设置了AllowOverride All,否则.htaccess文件的规则不会生效。
内容的提问来源于stack exchange,提问作者MacUser1234
相关产品推荐
相关产品推荐

