我有用于存放图片和样式的目录,以及一个Web.config
文件(使用 Orchard)。其中Web.config
有一行代码在我的共享主机上导致问题(在 WebMatrix 中运行良好):
<system.webServer>
<handlers accessPolicy="Script,Read">
<!--
iis7 - for any request to a file exists on disk, return it via native http module.
accessPolicy 'Script' is to allow for a managed 404 page.
-->
<add name="StaticFile" path="*" verb="*" modules="StaticFileModule" preCondition="integratedMode" resourceType="File" requireAccess="Read" />
</handlers>
</system.webServer>
当我尝试访问该目录中的任何文件时,我得到 500 页:
500 - 内部服务器错误。
您查找的资源存在问题,无法显示。
当我删除该行时
<add name="StaticFile" path="*" verb="*" modules="StaticFileModule" preCondition="integratedMode" resourceType="File" requireAccess="Read" />
它显示资源。
如何在不改变Web.config
每个目录中包含要直接访问的文件的情况下修复此问题?
答案1
我认为你不能(我的意思是在共享主机上)。
错误清楚地说:“无法添加类型为‘add’、且唯一键属性为‘name’设置为‘StaticFile’的重复集合条目”。这意味着name="StaticFile"
在配置层次结构的某个上方位置已经有一个条目(在父文件夹中的另一个 web.config 中...或者最有可能是全局 Web 服务器配置中)。
要解决此问题,您必须先删除现有的配置行。在添加您自己的处理程序之前,您必须<remove name="StaticFile" />
在您的部分中添加行<handlers>
,例如:
<system.webServer>
<handlers accessPolicy="Script,Read">
<remove name="StaticFile" />
<!--
iis7 - for any request to a file exists on disk, return it via native http module.
accessPolicy 'Script' is to allow for a managed 404 page.
-->
<add name="StaticFile" path="*" verb="*" modules="StaticFileModule" preCondition="integratedMode" resourceType="File" requireAccess="Read"/>
</handlers>
</system.webServer>
如果您可以完全控制您的服务器(但您没有,因为您使用的是共享主机),您可以StaticFile
从全局 IIS 配置中删除处理程序...但这样做明智吗?<remove...>
对于这两种情况,添加此行都是正确的方法。