如何从 IIS 中删除 WebDAV 模块?

问题描述 投票:0回答:7

我花了好几天的时间才在 MS Azure 上为我的 PHP 应用程序启用 PUT 和 DELETE 请求。我发现的一些答案建议从 IIS 中删除 WebDAV 模块。

我该怎么做?

azure azure-web-app-service webdav
7个回答
10
投票
  1. 转到您在 IIS 中的站点
  2. 点击“模块”
  3. 删除 WebDAV 模块
  4. 重新启动站点(可能不需要)

PUT 和 DELETE 请求现在应该可以工作。


9
投票

我花了一整天的时间来解决这个问题,并尝试了我遇到的每一个解决方案,但没有一个对我有用。最终起作用的是从打开或关闭 Windows 功能中关闭“WebDAV 发布”功能。它位于:

Internet 信息服务\万维网服务\常见 HTTP 功能\WebDAV 发布。


6
投票

我在 Azure 应用服务中托管一个 PHP 应用程序,我可以通过手动创建一个名为 web.config 的文件并将其添加到我的 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.NET\Framework\v4.0.30319\aspnet_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.NET\Framework64\v4.0.30319\aspnet_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)\PHP\v5.6\php-cgi.exe" resourceType="Either" requireAccess="Script" />
    </handlers>
  </system.webServer>
</configuration>

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


4
投票

有时我简直不敢相信,从事伟大的 .Net Core 工作的人竟然也从事 IIS 工作,至少可以说,这一切都是疯狂的。我不断搜索并试图找出问题所在,此外,我尽了最大努力记录错误

405 Method not allowed
,但无济于事。我不想更改
web.config
文件,也不想删除这个毫无意义的
WebDavModule
东西,因为我的网站与其他人工作的其他网站一起托管,所以我不想为其他人毁了这一天.

现在,抛开这种情感上的介绍,我设法通过简单的

IIS Configuration
步骤使其发挥作用。 想象一下,“简单”一词周围有一个象征性讽刺的双引号。

所以你可以这样做:

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

0
投票

我认为您的问题在 stackoverflow 的上一篇文章中已经有了解决方案。

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


0
投票

这个反应很好。基本上把它放在Web.config中。这就是@shiitake正在做的事情。

我已经使用该解决方案有一段时间了,但它很烦人,因为我必须在我的 Web.config 中维护它,而其他开发人员则不然。所以我把它从 IIS 中全部删除了。

  1. 打开 IIS 并转到有问题的网站。
  2. 单击“处理程序映射”
  3. 找到名为“WebDAV”的处理程序
  4. 选择它并删除它

第一次尝试时,我得到了,

Error: Cannot write configuration file due to insufficient permissions
。完全公开,我的同事为我修复了它并发送了以下说明。 (也许有人可以编辑并澄清步骤。)

  1. 停止该网站
  2. 将自己添加到安全组
  3. 移除处理程序。

0
投票

WebDAV模块 为了提取,我在手动 webconfig 文件中编写了这段代码

<system.webServer>
  <modules>
    <remove name="WebDAVModule" />
  </modules>

  <handlers>
    <remove name="WebDAV" />
  </handlers>
</system.webServer>

但是我希望在发布 Visual Studio 时将这一行自动添加到 webconfig 中,而不是手动添加。我会将发布文件上传到域。

© www.soinside.com 2019 - 2024. All rights reserved.