我的知识记录

子域名访问出现Directory Listing Denied_子站根目录配置

很多站长在Windows虚拟主机上部署网站后,访问域名出现「Directory Listing Denied」错误,不知道是什么意思、怎么解决。这个错误本质上是IIS(Internet Information Services,Windows Web服务器)在访问目录时,找不到默认首页文件,且不允许列出目录内容,所以拒绝访问。常见原因包括:没有上传首页文件、首页文件名不在IIS默认文档列表中、域名绑定的根目录不对、文件大小写不匹配(Linux区分大小写但IIS通常不区分,但某些配置下可能有问题)、伪静态规则错误、文件权限不足、子目录没有默认文档等。本文逐一分析这些原因并给出对应的解决方法,覆盖IIS6/IIS7/IIS8/IIS10不同版本的配置差异,以及各种程序(ASP/PHP/静态/WordPress等)的特殊情况。

域名绑定/物理路径错误导致Directory Listing Denied。如果域名绑定的物理路径不对(指向了没有首页文件的目录),访问域名就会出现Directory Listing Denied。排查:1.在主机面板中查看域名绑定的根目录(物理路径),确认指向了正确的网站程序目录(如wwwroot或wwwroot/你的网站目录)。常见错误:绑定到了wwwroot的上一级目录、绑定到了空目录、绑定到了程序的子目录(如绑定到了wwwroot/wp-admin而不是wwwroot)。2.如果用FTP看根目录下有程序文件(index.php等),但访问仍Directory Listing Denied,可能是域名绑定的路径和FTP看到的路径不是同一个(有些主机FTP根目录和网站根目录不同,如FTP根目录是/home/user,网站根目录是/home/user/wwwroot),确认域名绑定的是wwwroot而不是/home/user。3.新添加的域名或子域名,绑定后可能需要等待生效(面板配置生效通常立即,但DNS解析需要时间),确认DNS已解析到服务器IP。4.如果是附加域名/多域名,确认每个域名绑定的目录正确(不同域名可以绑定不同目录,也可以绑定同一目录)。5.解决:在面板中修改域名绑定的物理路径为正确的网站根目录,保存后测试。6.注意——修改绑定路径后,该域名下的所有访问都会指向新目录,确保新目录有完整的程序文件和正确的配置(如数据库配置文件中的路径、伪静态规则等)。

子目录出现Directory Listing Denied的解决。如果首页(根目录)正常,但访问某个子目录(如http://域名/blog/、http://域名/forum/、http://域名/2024/)出现Directory Listing Denied,说明该子目录下没有默认文档。解决:1.确认该子目录的用途——如果是程序目录(如/blog/是博客程序目录),该目录下应该有首页文件(如index.php),检查是否上传完整(可能漏传了index.php)。2.如果该子目录是文章/内容目录(如/2024/、/category/tech/),通常是伪静态/URL重写的路径,不需要真实存在的目录和默认文档——这种情况出现Directory Listing Denied说明伪静态规则没有正确处理该URL(请求被IIS当作真实目录访问了),需要检查伪静态规则(web.config的rewrite规则)是否正确覆盖了该路径,或者URL是否写错了。3.如果该子目录确实需要直接访问(如/download/目录列出下载文件),有两个选择:a.在该子目录下放一个index.html/index.php默认文档(如下载列表页);b.(不推荐)开启该目录的目录浏览(见下文),让IIS列出文件列表。4.子目录的默认文档配置——可以在子目录下单独放一个web.config配置该目录的默认文档(和根目录web.config写法一样,放在子目录下只对该子目录生效),或者在IIS管理器中选中该子目录配置默认文档(继承根目录配置,通常不需要单独配,除非子目录需要不同的默认文档)。5.注意——如果子目录是真实存在的文件夹但你不希望用户直接访问(如/include/、/config/、/admin/),出现Directory Listing Denied是正常的(安全的,禁止列目录),不需要解决;如果该目录下有敏感文件,建议在web.config中配置禁止访问该目录。

伪静态/URL重写规则错误导致Directory Listing Denied。很多PHP程序(WordPress、dedecms、ThinkPHP等)在IIS上需要配置URL重写(伪静态)规则,把动态URL(如index.php?page=1)重写为静态URL(如/page/1.html)。如果伪静态规则配置错误,可能导致某些URL被IIS当作真实目录访问,找不到默认文档就返回Directory Listing Denied。排查和解决:1.确认IIS是否安装了URL Rewrite模块——IIS7+需要单独安装URL Rewrite扩展(微软官网下载),没有安装的话web.config中的规则不会生效,伪静态URL会404或Directory Listing Denied。在IIS管理器中看是否有「URL重写」图标,没有就安装。2.检查web.config中的rewrite规则——确认规则正确(从程序官方文档获取IIS伪静态规则,不要自己写),规则的match pattern是否覆盖了出现错误的URL路径。3.WordPress的IIS伪静态规则示例(web.config): 。这个规则把所有不是真实文件/目录的请求重写到index.php,如果规则缺失,访问伪静态URL会被当作目录访问,出现Directory Listing Denied。4.ThinkPHP/dedecms等程序也有对应的IIS伪静态规则,从官方文档或安装包中获取,正确配置到web.config。5.配置伪静态规则后,测试之前出错的URL是否正常访问;如果仍有问题,检查URL Rewrite模块是否启用、规则是否有语法错误(web.config XML语法错误会导致500)。6.注意——Apache的.htaccess规则不能直接用到IIS,IIS需要用web.config的规则,格式不同;有些面板(如PLESK)提供「伪静态」设置界面,可以直接选择程序类型自动生成规则。

web.config完整配置示例(默认文档+伪静态+错误页+目录浏览禁用)。给一个常用的web.config配置模板,包含常见配置,虚拟主机用户可以直接参考修改:<?xml version="1.0" encoding="UTF-8"?> 。说明:-这个模板包含了默认文档(解决Directory Listing Denied)、禁用目录浏览(安全)、伪静态规则(WordPress示例)、自定义错误页、静态资源缓存,是一个比较完整的IIS站点配置。-使用时根据自己的程序修改伪静态规则(dedecms/ThinkPHP等有不同的rewrite规则,从官方获取)。-如果已有web.config,不要直接覆盖,把需要的配置段合并到现有配置中(修改前备份)。-XML语法严格,标签要正确闭合,修改后先测试,出现500错误说明语法有误,恢复备份并检查。-自定义404/403页面需要先创建对应的404.html/403.html文件放在根目录。-这个配置放在网站根目录的web.config中,对整个站点生效;子目录可以有自己的web.config覆盖父配置。

IIS错误子状态码说明(精准定位问题)。IIS的403错误有多个子状态码(403.x),不同子状态码对应不同原因,查看IIS日志可以看到子状态码,帮助精准定位:-403.1:执行访问被禁止(CGI/ISAPI程序执行权限问题)。-403.2:读取访问被禁止(没有读取权限)。-403.3:写入访问被禁止(没有写入权限,上传/修改时出现)。-403.4:要求SSL(访问的资源要求HTTPS,用HTTP访问出现)。-403.5:要求SSL 128位加密。-403.6:IP地址被拒绝(IP限制/黑名单)。-403.7:要求客户端证书。-403.8:站点访问被拒绝(站点级访问限制)。-403.9:连接数过多(超过站点连接限制)。-403.10:配置无效(配置文件错误)。-403.11:密码已更改。-403.12:映射程序拒绝访问。-403.13:客户端证书已被吊销。-403.14:目录列表被拒绝(Directory Listing Denied!就是这个!没有默认文档且目录浏览被禁用)。-403.15:客户端访问许可数过多。-403.16:客户端证书不受信任或无效。-403.17:客户端证书已过期或尚未生效。-403.18:无法在当前应用池中执行请求。-403.19:无法在当前应用池中执行CGI。-403.20:登录时通行证失败。-403.21:源访问被拒绝。-403.22:无限深度被拒绝。所以,如果错误日志中是403.14,100%是默认文档/目录浏览问题(就是本文讲的Directory Listing Denied);如果是其他403.x子状态码,是权限/SSL/IP限制等其他问题,按对应原因解决。查看IIS日志方法:日志通常在C:inetpublogsLogFilesW3SVCxxx(xxx是站点ID),日志文件名按日期命名(如u_ex240101.log),用文本编辑器打开,找到出错的请求行,看状态码列(如403 14,403是状态码,14是子状态码)。虚拟主机用户可以在面板的「日志」/「访问日志」中下载或查看,或联系主机商获取。

IIS6(Windows Server 2003)配置默认文档。IIS6是较老版本,界面和操作与IIS7+不同:1.打开IIS管理器(开始→管理工具→Internet信息服务(IIS)管理器)。2.展开服务器节点→「网站」→右键目标网站→「属性」。3.切换到「文档」选项卡。4.勾选「启用默认内容页」,在列表中查看默认文档(默认有default.htm、default.asp、index.htm、iisstart.htm等)。5.点击「添加」输入你的首页文件名(如index.php),确定。6.选中添加的文件名,点击「上移」移到列表顶部(优先查找)。7.确定保存,无需重启IIS(立即生效)。8.注意——IIS6已非常老旧(Windows Server 2003已停止支持),建议升级到新版本系统;IIS6没有URL Rewrite模块(需要第三方组件如IIRF),伪静态配置方式不同。IIS7/IIS7.5(Windows Server 2008/2008 R2):操作见前文IIS管理器默认文档配置,需要注意IIS7默认没有安装URL Rewrite模块,需要单独下载安装(微软URL Rewrite 2.0),否则伪静态规则不生效。IIS8/IIS8.5(Windows Server 2012/2012 R2):同IIS7操作,URL Rewrite通常已预装(或可通过Web Platform Installer安装)。IIS10(Windows Server 2016/2019/2022):同IIS7操作,界面略有更新,功能更完善,支持HTTP/2等。总结——从IIS7开始默认文档配置方式基本一致(IIS管理器→网站→默认文档),虚拟主机用户都可以通过修改web.config配置,不需要记不同版本的界面操作。

开启目录浏览(不推荐,仅特殊场景)。如果确实需要让用户看到目录下的文件列表(如文件下载目录、软件镜像站),可以开启目录浏览,但这会暴露目录结构和文件,存在安全风险(攻击者可能找到敏感文件、备份文件、配置文件),不建议在网站根目录或包含敏感文件的目录开启。配置方法:1.IIS管理器→选中网站或目录→双击「目录浏览」→右侧操作面板点击「启用」(默认是禁用,显示「禁用」状态)。2.启用后,访问没有默认文档的目录就会显示文件列表(文件名、大小、修改日期)。3.通过web.config配置: (enabled="false"是禁用)。4.注意——只在必要的特定目录开启(如/public/download/),不要在网站根目录开启;开启后确保该目录下没有敏感文件(如config.php、.env、备份文件、数据库文件);下载目录建议还是用默认文档(index.html列出下载链接)而不是目录浏览,更安全可控;如果只是临时调试,调试完立即关闭目录浏览。

Apache/Nginx下的对应错误(对比理解)。虽然Directory Listing Denied是IIS特有错误,但Apache和Nginx也有类似问题,理解原理后通用。Apache(Linux主机):-访问目录没有默认文档(DirectoryIndex)时,如果开启了Options Indexes,显示目录文件列表;如果关闭了Indexes(默认关闭,出于安全),返回403 Forbidden错误(不是Directory Listing Denied,但本质相同)。-解决:在.htaccess或httpd.conf中设置DirectoryIndex index.php index.html(指定默认文档),确保目录下有对应文件;或Options +Indexes开启目录列表(不推荐)。Nginx:-访问目录没有index文件时,如果没有配置autoindex on,返回403 Forbidden;配置了autoindex on则显示目录列表。-解决:在nginx.conf的server/location中设置index index.php index.html;(指定默认文档);或autoindex on;开启目录列表(不推荐)。本质原理完全一致:Web服务器访问目录→查找默认文档→找到则返回,找不到则看是否允许列目录→允许则列文件,不允许则403。不同Web服务器的错误提示文字不同(IIS是Directory Listing Denied,Apache/Nginx是403 Forbidden),但解决方法相同——配置正确的默认文档。理解了这个原理,不管用什么服务器都能快速解决。

站长反馈:「Windows虚拟主机装WordPress后访问出现Directory Listing Denied,按教程在web.config里加了defaultDocument包含index.php,马上就好了,原来IIS默认文档里没有index.php」「子目录/blog/出现这个错误,查了是index.php漏传了,补传后正常,排查流程很实用」。

经验总结:Directory Listing Denied是IIS/Windows虚拟主机的特有错误,但本质原理通用——Web服务器访问目录找不到默认文档且禁止列目录就返回403。解决核心是「确保目录下有默认文档+IIS默认文档列表包含该文件名」。最稳妥的方式是在网站根目录web.config中配置defaultDocument(随网站文件一起,迁移后也生效),不要依赖IIS服务器级默认配置(不同主机/版本可能不同)。部署网站时主动配置web.config(默认文档+伪静态+错误页),从源头避免这个错误。理解原理后,Apache/Nginx的403目录问题也能用同样思路解决。

子域名访问出现Directory Listing Denied_子站根目录配置

标签:

更新时间:2026-08-27 13:05:10

上一篇:PHP网站数据库连接1045错误_配置文件检查_连接池配置优化_实用教程

下一篇:华为云虚拟主机屏蔽扫描器 UA配置教程_Linux 虚拟主机UA黑名单正则