如何阻止访问EC2上Apache服务器的Web文件夹?
解决Apache下拦截特定文件夹访问的问题
第一步:确保Apache允许.htaccess生效
EC2上的Apache默认可能限制了.htaccess的权限,先检查站点配置文件(路径取决于系统:Amazon Linux在/etc/httpd/conf.d/,Ubuntu在/etc/apache2/sites-available/):
找到对应站点的<Directory>块,确保Web根目录(比如/var/www/html)配置了AllowOverride All(至少AllowOverride FileInfo),示例:
<Directory /var/www/html> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory>
修改后重启Apache服务:
- Amazon Linux/RHEL:
sudo systemctl restart httpd - Ubuntu/Debian:
sudo systemctl restart apache2
第二步:配置.htaccess规则
在Web根目录下创建/编辑.htaccess文件,根据需求选择以下方案:
方案1:拦截指定精准路径
针对/include、/includes/images这类明确路径拦截:
RewriteEngine On # 拦截/include目录(含末尾斜杠的情况) RewriteRule ^include/?$ - [F,L] # 拦截/includes/images目录 RewriteRule ^includes/images/?$ - [F,L]
规则说明:
RewriteEngine On:开启URL重写功能^include/?$:匹配以include开头、末尾可选斜杠的路径[F,L]:F返回403禁止访问错误,L表示终止后续规则处理
方案2:拦截所有含特定关键词的路径
如果要拦截任何包含include的目录访问(比如/test/include、/includes/js等):
RewriteEngine On RewriteRule ^.*include.*$ - [F,L]
方案3:禁止所有目录的直接访问
彻底禁止用户直接访问任何目录,仅允许文件访问:
# 关闭目录索引功能 Options -Indexes RewriteEngine On # 判断请求的是目录 RewriteCond %{REQUEST_FILENAME} -d # 返回403错误 RewriteRule ^(.*)$ - [F,L]
第三步:验证与排查
- 访问目标测试路径(比如
www.mywebsite.com/include),确认返回403错误 - 检查
.htaccess权限:设置为644,所有者设为Apache运行用户(apache或www-data),执行命令:sudo chmod 644 /var/www/html/.htaccess && sudo chown apache:apache /var/www/html/.htaccess - 若规则不生效,查看Apache错误日志(
/var/log/httpd/error_log或/var/log/apache2/error.log),排查配置语法或权限问题
内容的提问来源于stack exchange,提问作者Yuval Sh
相关产品推荐
相关产品推荐

