打开网页弹出403提示,代表服务器收到了你发送的请求,只是拒绝提供内容。401代表没有登录,403是就算登录成功也没有访问权限,或是服务器本身就不允许访问资源。分清这两个状态,排查方向才不会出错。
站在普通访客角度,能尝试的操作不多。检查网址末尾是否多余斜杠,还有字母大小写,部分服务器路径区分大小写,字符不一致就会返回403。浏览器缓存可能保留旧的权限状态,按下Ctrl+F5强制刷新,或者打开无痕窗口测试。无痕模式可以正常访问,说明问题来自cookie或者浏览器扩展,临时关闭广告拦截、脚本管理类插件重试。切换手机热点访问,如果流量环境可以打开,宽带环境不行,大概率你的IP被服务器拉黑,可以等待一段时间或者联系网站管理员提交IP核查。

账号权限也是常见诱因。你成功登录账号,但当前账号没有访问这个目录或文件的权限。像一些后台系统,普通用户点击管理员页面就会返回403。退出账号重新登录,或者更换拥有对应权限的账号测试验证。如果是企业内网系统,只能找管理员分配权限,自己调整无法解决。
网站管理员排查的项目会更多。文件权限是最常见原因,Linux环境目录一般设置755,文件644,权限过高或者过低都会触发403。尤其是刚上传文件之后,文件属主变成root,web服务进程无法读取,直接拒绝访问。使用chmod修改权限,不要直接设置777,这只是掩盖故障,不能解决根本问题。
服务器配置里有多项设置可以触发403。Apache的.htaccess可能写了Deny from all,或是Order allow,deny配置顺序出错。Nginx里deny、allow指令顺序写反,也会误拦截正常访问。还有目录索引问题,访问目录地址时,服务器没有开启autoindex,同时找不到index.html、index.php这类默认首页,就返回403而不是404。检查目录内是否存在默认首页文件。
防盗链规则设置过严也会误杀访客。Referer策略只允许本站域名访问,从搜索引擎或者其他网站跳转过来的请求就会被拦截。部分CDN、WAF的规则更加隐蔽,拦截特定User-Agent、空Referer、带特定参数的URL。可以临时把WAF切换到观察模式,查看日志里403的拦截原因,减少盲目测试。
CentOS这类系统里SELinux经常造成这类故障。文件权限看起来没问题,但SELinux安全上下文不匹配,依旧返回403。用ls -Z查看上下文,和正常目录对比,或者临时执行setenforce 0测试。如果确定是SELinux问题,使用restorecon或者chcon修正,不要长期关闭SELinux。
伪静态规则编写错误也会产生403。比如WordPress的.htaccess文件损坏,或是Nginx的try_files配置出错,请求被重定向到不存在的路径,服务器返回403。把规则恢复默认,再逐条添加测试。
还有少数情况是服务器资源耗尽或者连接数达到上限,部分面板会返回403而不是503。查看服务器负载与系统日志,如果确认是资源瓶颈,重启服务或者扩容资源。
如果网站使用云服务商OSS或者CDN,403可能来自签名URL过期、防盗链策略,或是Bucket权限设置为私有。进入对应控制台查看访问日志,日志一般会标注拒绝访问的具体原因。403报错不像500那么笼统,服务器日志error_log和access_log里会记录详情,查阅日志比反复测试效率更高。