有人建议我取消勾选 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 类型之后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>