建议我在 IIS 的请求过滤中取消选中“允许未列出的文件扩展名”选项。但现在 PHP 应用程序无法运行,我得到:
HTTP 错误 404.7 - 未找到
请求过滤模块用于拒绝文件扩展名。
我不确定这是否是由于.php
文件扩展名或运行应用程序的 php-cgi.exe 模块引起的。
无论哪种情况 - 我需要做什么才能使 PHP 工作(使用 php-cgi)并且也无法“允许未列出的文件扩展名”?
我认为这与“文件扩展名”和“允许文件扩展名”有关,但不确定如何执行此操作,因为我尝试添加.php
但仍然不起作用
编辑:出于测试目的,我还添加了exe
但仍然错误 404.7
编辑 2:添加了网站中可能使用的任何文件类型:css
,js
并且仍然是 404.7
编辑3 :我只是检查在没有请求过滤的情况下尝试加载的页面上加载的所有文件,添加了正在加载的所有png
可能的扩展名: ,,,等等,但仍然是404.7jpg
ttf
svg
更新:即使将.php
扩展名添加到 Mime Types as后application/x-httpd-php
,它仍然不起作用
现在我有以下块web.config
:
<fileExtensions allowUnlisted="false">
<add fileExtension=".html" allowed="true" />
<add fileExtension=".ico" allowed="true" />
<add fileExtension=".htm" allowed="true" />
<add fileExtension="." allowed="true" />
</fileExtensions>
当对允许的文件类型执行请求过滤时,对于期望请求 URL 完全限定文件扩展名的应用程序/框架来说,设置非常直观。然而,MS 文档没有提及如何处理使用虚拟(无扩展名)URL 控制应用程序路由的应用程序/框架的扩展名过滤。在这些情况下,扩展名不是人们所期望的“”,而是“.”。
添加
<add fileExtension="." allowed="true" />
到块的顶部将允许请求进入处理管道,以便应用程序可以处理它并根据需要进行路由。