如何在IIS上启用PHP应用程序的DELETE和PUT方法?

12

尽管在本地DELETE请求能够成功工作,但是当我将我的应用部署到MS Azure上时,它就无法工作了。

以下是我尝试删除记录时在控制台中得到的输出:

DELETE http://mywebsite.azurewebsites.net/api/subjects/1 405 (Method Not Allowed)

我的应用程序在 cleardb 上使用 mySQL

如何解决这样的问题?

编辑

我的应用程序是一个 PHP 5.5 应用程序,这是我尝试在 web.config 中执行的操作,以启用 DELETE 和 PUT,但它没有起作用:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
        <rules>
        <rule name="Imported Rule 1" stopProcessing="true">
        <match url="^(.*)$" ignoreCase="false" />
        <conditions logicalGrouping="MatchAll">
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                        </conditions>
                        <action type="Rewrite" url="index.php?url={R:1}" appendQueryString="true" />
                </rule>
            </rules>
        </rewrite>

<validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true">
      <remove name="WebDAVModule" />
    </modules>
    <security>
      <requestFiltering>
        <verbs applyToWebDAV="false">
          <add verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS,XYZ" allowed="true" />
        </verbs>
      </requestFiltering>
    </security>

         <handlers>
<remove name="PHP55_via_FastCGI" />
  <add name="PHP55_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.5\php-cgi.exe" resourceType="Either" requireAccess="Script" />

              <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
              <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
              <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
              <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" />
            </handlers>

    </system.webServer>
</configuration>

请注意:"PHP55_via_FastCGI"处理程序定义中的GET、PUT等之间的空格。在我的情况下,这是阻塞因素-不应该有空格。 - Wojtek Trelak
3个回答

2

我认为在WebApi / IIS8中,默认情况下禁用了PUT和DELETE方法,这似乎是您正在使用的。关于此问题有很多讨论,请参考这里


请查看上面的编辑 - Samir Sabri
啊,抱歉,我不知道关于PHP Web服务配置的事情,我以为你在使用WebApi。 - Paul Fryer

2

请查看上面的编辑 - Samir Sabri
这个链接失效了。 - Michael Hampton

2
我知道,只需进入IIS用户界面,然后请求过滤,然后选择HTTP动词。最后,为所需的动词添加一个新的允许规则即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接