如何从IIS中删除WebDAV模块



我挣扎了好几天,使我的PHP应用程序在微软Azure的PUT和DELETE请求。我找到的一些答案建议从IIS中删除WebDAV模块。

我该怎么做呢?

我花了一整天的时间在这个问题上,尝试了我遇到的每一个解决方案,但没有一个对我有效。最终成功的方法是从打开或关闭Windows功能中关闭"WebDAV发布"功能。它位于:

互联网信息服务万维网服务通用HTTP功能WebDAV Publishing.

  1. 在IIS中转到您的站点
  2. 单击"Modules"
  3. 删除WebDAVModule
  4. 重新启动站点(可能不需要)

我在Azure应用程序服务中托管一个PHP应用程序,我能够通过手动创建一个名为web的文件来解决这个问题。配置并添加到我的web应用程序的根目录。

这是该文件的全部内容。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <security>
        <requestFiltering>
            <verbs allowUnlisted="false">
                <add verb="GET" allowed="true" />
                <add verb="POST" allowed="true" />
                <add verb="DELETE" allowed="true" />
                <add verb="PUT" allowed="true" />
            </verbs>
        </requestFiltering>
    </security>
    <modules runAllManagedModulesForAllRequests="true">
      <remove name="WebDAVModule" />
    </modules>
    <handlers>
      <remove name="WebDAV" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="PHP56_via_FastCGI" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS,XYZ" modules="IsapiModule" scriptProcessor="%windir%Microsoft.NETFrameworkv4.0.30319aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS,XYZ" modules="IsapiModule" scriptProcessor="%windir%Microsoft.NETFramework64v4.0.30319aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS,XYZ" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
      <add name="PHP56_via_FastCGI" path="*.php" verb="GET, PUT, POST, HEAD, OPTIONS, TRACE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK" modules="FastCgiModule" scriptProcessor="D:Program Files (x86)PHPv5.6php-cgi.exe" resourceType="Either" requireAccess="Script" />
    </handlers>
  </system.webServer>
</configuration>

你会注意到在处理程序部分它引用了PHP56_via_FastCGI。这是PHP 5.6特有的。如果您使用的是不同版本的PHP,则需要更新名称和文件路径以反映该版本。

有时候我简直不敢相信那些为。net Core工作的人也在为IIS工作,至少可以这么说。我一直在搜索并试图找出问题所在,此外,我尽我所能记录错误405 Method not allowed,但无济于事。我不想改变web.config文件,也不想删除这个毫无意义的WebDavModule东西,因为我的网站是和其他网站一起托管的,所以我不想毁了其他人的一天。

现在,抛开这个情绪化的介绍,我设法通过简单的IIS Configuration步骤使其工作。想象在"simple"这个词周围加一个讽喻的双引号。

你可以这样做:

    打开IIS管理器
  1. 转到要为其启用PUT, DELETE动词的站点级别。
  2. Handler Mappings点击WebDav,然后点击Edit
  3. 点击Request Restrictions,从那里导航到Verbs标签
  4. 选择All verbs,最后单击OK。我发誓这个UI比人类大脑神经元连接的完整地图更令人困惑。
  5. 重新启动Web Site,因为我这样做只是为了以防万一,因为我在接下来的几个月里有足够的头痛。

我认为在以前的帖子中已经有解决你的问题的方法。

试一下,希望能有所帮助!https://stackoverflow.com/a/16275723/3203213

这个响应很好。基本上把它放在Web.config中。@shiitake就是这么做的

我已经使用这个解决方案有一段时间了,但它很烦人,因为我必须在我的Web中维护它。在其他开发人员不做的时候进行配置。所以我把它从IIS中全部删除了。

  1. 打开IIS并进入相关站点
  2. 点击"Handler Mappings"
  3. 查找名为"WebDAV"的处理程序
  4. 选择并删除

第一次尝试,我得到了Error: Cannot write configuration file due to insufficient permissions。坦白说,我的同事帮我解决了这个问题,并发送了以下说明。(也许有人可以编辑和澄清步骤。)

  1. 停止站点
  2. 将自己添加到安全组
  3. 删除处理程序

相关内容

  • 没有找到相关文章

最新更新