.htaccess屏蔽autodiscover.xml仍返回WordPress 404页如何解决
问题原因
你原来的配置不生效核心是<Files>指令仅匹配文件名称,不支持路径匹配,你写的带路径的规则无法命中目标文件,请求会继续往下走到WordPress的重写逻辑,最终触发WP自带的404响应。另外Order Allow,Deny是Apache 2.2的旧语法,2.4及以上版本已经改为Require all denied,就算修正语法,路径不匹配的问题还是会导致规则失效。
正确配置方案
方案1:根目录.htaccess添加重写规则(兼容性最好,不需要目录真实存在)
把下面的规则添加到站点根目录.htaccess文件的最顶部,必须放在WordPress自带的重写规则块之前,保证优先匹配:
<IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^autodiscover/autodiscover\.xml$ - [F,L] </IfModule>
[F]标志会直接返回403 Forbidden响应,[L]标志终止后续所有重写规则执行,完全不会触发WordPress的PHP逻辑- .htaccess的重写规则匹配的是相对目录路径,不需要加前导斜杠
方案2:子目录单独配置(仅适用于autodiscover目录真实存在的场景)
在/autodiscover目录下单独新建.htaccess文件,写入对应版本的规则即可:
# Apache 2.2版本语法 <Files "autodiscover.xml"> Order Allow,Deny Deny from all </Files> # Apache 2.4及以上版本语法 <Files "autodiscover.xml"> Require all denied </Files>
验证方法
配置完成后直接访问该路径,正常会直接返回Apache默认的403错误页,不会再加载WordPress主题样式的404页面,也不会触发PHP执行。
内容的提问来源于stack exchange,提问作者Screenload
相关产品推荐
相关产品推荐

