PHP生成的用户目录跳转链接返回403 Forbidden无权限如何修复?
403 Forbidden问题排查修复方案
第一步:校验服务端权限与配置
你用的是XAMPP集成环境,403报错第一优先级检查Apache和系统文件夹权限:
- 检查目标根目录
C:\xampp\htdocs\mysite\parentfolder以及所有用户子目录的Windows系统权限:给Apache运行用户(默认XAMPP的Apache用系统账户运行,也可以在httpd.conf里查看User/Group配置项)授予读取和执行、列出文件夹内容、读取权限,权限应用范围选择「当前文件夹、子文件夹和文件」 - 检查Apache的
httpd.conf或者站点对应的虚拟主机配置,确认目标目录的访问规则为允许访问,且开启了目录索引(空文件夹没有索引文件时必须开启该选项才不会报403),配置示例如下:
<Directory "C:\xampp\htdocs\mysite\parentfolder"> Options Indexes FollowSymLinks Includes ExecCGI AllowOverride All Require all granted </Directory>
- 检查
parentfolder及其子目录下是否存在.htaccess文件,确认文件内没有配置Require all denied、Deny from all这类禁止访问的规则
第二步:修正代码路径拼接错误
你当前生成链接的逻辑存在问题:$dir是本地磁盘的绝对路径,直接拼在href属性里会生成不符合Web规则的链接,你看到的地址栏路径正确大概率是错觉,需要把路径替换为站点Web路径:
<?php $dir_open = opendir('.'); $currentdir = getcwd(); echo $currentdir; // 新增Web根路径拼接逻辑,对应你站点的实际访问路径 $web_base = '/mysite/parentfolder/'. $_SESSION['name']; while(false !== ($filename = readdir($dir_open))){ if($filename != "." && $filename != ".."){ // 用Web路径生成链接,不要用本地磁盘路径 $link = "<a href='$web_base/$filename'> $filename </a><br />"; echo $link; } } closedir($dir_open); ?>
第三步:空文件夹兼容处理
你提到所有目标文件夹均为空,这种场景下如果没有开启Apache目录索引,也没有默认索引文件,就会直接返回403,两种修复方案二选一即可:
- 方案1:保持上面Apache配置里的
Indexes选项开启,空目录会自动显示空的文件列表,不会报错 - 方案2:给每个用户目录下默认生成一个空白的
index.html文件,Apache匹配到索引文件就不会触发目录列取的权限校验
第四步:生效验证
所有配置修改完成后重启XAMPP的Apache服务,清空浏览器缓存后重新点击链接测试即可。
内容的提问来源于stack exchange,提问作者Bob D. Builder
相关产品推荐
相关产品推荐

