IIS服务器环境下某路径(文件夹)下所有PHP接口无法运行报500.19错误
环境:IIS8.5 + php7.2.1
错误描述:某目录下(如 d:webA)所有php接口文档运行错误,接口测试工具返回空内容,浏览器提示500错误
解决方式:
- 开启PHP和IIS错误日志;
- 查看IIS日志,发现线索
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) cs(Referer) sc-status sc-substatus sc-win32-status time-taken
2018-07-31 09:33:36 172.0.0.0 GET /xxxx/xxx.php - 443 - 100.0.0.0 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/64.0.3282.140+Safari/537.36+Edge/17.17134 - 500 19 183 15
- 最主要是字段帮了忙
500 19
代表500.19错误,经查是web服务器内部运行错误
- 仔细查看IIS各项设置并回忆可能的改动,发现
A
目录属于“新增”目录,里边所有文件是从之前测试服务器上复制过来,其原属于测试服务器上一个独立“网站”配置,因此web.config
文件中包含了对".txt"的请求筛选,即不允许访问".txt"的文件。当A
目录整体复制到当前服务器时,保存到默认“网站”下的一个虚拟目录,而默认网站也设置了相同的请求筛选,导致配置冲突,在对A
进行访问时整体路径都出错。 - 打开
A
下的配置文件,去掉所有和所属“网站”冲突的配置,具体为
<security>
<requestFiltering>
<fileExtensions>
<add fileExtension=".txt" allowed="false" />
</fileExtensions>
</requestFiltering>
</security>
并应用,重启网站,解决