如何使用.htaccess文件正确锁定网站指定文件夹?
问题原因
- 配置规则放错位置:你将带认证规则的
.htaccess放在了站点根目录,规则默认作用于根目录下所有文件/文件夹,所以会触发全站认证,而非仅保护指定子文件夹 - 密码文件路径填写错误:
AuthUserFile需要填写服务器绝对文件系统路径,你填写的/fares/.htpasswd是站点URL路径,Apache无法定位到密码文件,会直接返回403错误 - 密码未加密:
.htpasswd中的密码不能是明文,你现在写的djefaflia是明文,Apache校验时无法匹配,就算路径正确也会认证失败
修复步骤
- 调整认证配置的存放位置
删除根目录.htaccess里的认证相关配置,仅保留404规则即可:
ErrorDocument 404 /404.html
之后在你需要锁定的子文件夹内新建.htaccess,写入以下认证规则:
#Protect Directory AuthName "Dialog prompt" AuthType Basic AuthUserFile 替换为你的.htpasswd文件对应的服务器绝对路径 Require valid-user
如果不清楚服务器绝对路径,可以在站点根目录新建一个临时PHP文件,写入<?php echo __DIR__;?>,访问该文件即可拿到根目录的绝对路径,再拼接子文件夹路径即可
2. 生成加密的密码串
不要直接在.htpasswd内填写明文密码,可通过两种方式生成符合要求的密码文件:
- Linux服务器可直接执行命令生成:
htpasswd -c /替换为你要存放密码文件的绝对路径/.htpasswd fares,按提示输入两次密码就会自动生成加密后的密码文件 - 也可使用本地的htpasswd生成工具生成加密串,写入
.htpasswd文件即可
- 验证配置生效
修改完成后,本地环境重启Apache服务,托管服务器等待几秒配置自动生效即可。此时访问被保护的子文件夹会弹出认证窗口,输入正确账号密码即可访问,站点其他页面不受影响。
内容的提问来源于stack exchange,提问作者Fares
相关产品推荐
相关产品推荐

