如何禁用未列出的文件扩展名但使 PHP 应用程序正常运行?

如何禁用未列出的文件扩展名但使 PHP 应用程序正常运行?

有人建议我取消勾选 IIS 中的请求过滤中的“允许未列出的文件扩展名”选项。但现在 PHP 应用程序无法运行,我得到:

HTTP 错误 404.7 - 未找到

请求过滤模块,用于拒绝文件扩展名。

我不确定这是由于.php文件扩展名还是运行应用程序的 php-cgi.exe 模块引起的。

无论哪种情况 - 我需要做什么才能使 PHP 工作(使用 php-cgi)并且无法“允许未列出的文件扩展名”?

我认为这与“文件扩展名”和“允许文件扩展名”有关,但不确定该怎么做,因为我尝试添加.php但仍然不起作用

编辑:为了测试目的,我也添加了,exe但仍然错误 404.7

编辑2:添加了网站中可能使用的任何文件类型:cssjs仍然是 404.7

编辑3:我只是检查我尝试加载的页面上的所有文件,而无需请求过滤,添加的全部可能正在加载的扩展名:、、png等等,但仍然是 404.7jpgttfsvg

更新:即使在将.php扩展添加到 Mime 类型之后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>

答案1

在对允许的文件类型执行请求过滤时,对于期望请求 URL 完全符合文件扩展名的应用程序/框架来说,设置非常直观。然而MS 文档对于如何使用虚拟(无扩展名)URL 控制应用程序路由的应用/框架,没有说明如何处理扩展名过滤。在这些情况下,扩展名不是人们所期望的“”,而是“。”。

添加<add fileExtension="." allowed="true" />到块的顶部将允许请求进入处理管道,以便应用程序可以处理它并按其认为合适的方式进行路由。

<fileExtensions allowUnlisted="false">
 <add fileExtension="." allowed="true" />
 <add fileExtension=".php" allowed="true" />
 <add fileExtension=".html" allowed="true" />
 <add fileExtension=".ico" allowed="true" />
 <add fileExtension=".htm" allowed="true" />
 <add fileExtension=".css" allowed="true" />
 <add fileExtension=".js" allowed="true" />
</fileExtensions>

相关内容