我有图像和样式的目录,用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文件,其中包含的文件,直接被访问的文件?
我不认为你可以(在共享主机,我的意思是)。
错误清楚地表明: “不能添加具有唯一键属性”名称“设置为”StaticFile“的types”添加“的重复收集条目 。 这意味着在configuration层次结构中(在父文件夹中的另一个web.config中,或者很可能是全局Web服务器configuration中),已经有一个name="StaticFile"的条目。
要解决它,你必须先删除现有的configuration线。 在添加自己的处理程序之前,必须将<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>
如果你将完全控制你的服务器(你不知道,因为你在共享主机),你可以从全局的IISconfiguration中删除StaticFile处理程序…但是明智吗? 添加<remove...>行是两种情况的正确方法。