405方法不允许IIS 10 Windows Server 2016

时间:2018-04-22 16:00:21

标签: php windows iis methods server

我正在尝试为我的网站创建一个API,到目前为止它已经使用了GET和POST方法,但DELETE方法,我只是不能让它工作。我知道很多人都有这个问题,但我无法找到解决方案。如果有人可以帮助我,谢谢!

PS:为了清楚起见,我没有在Windows Server上安装WebDav模块。

这是我的index.php:

<?php
require_once("DB.php");

$db = new DB("127.0.0.1", "SocialNetwork", "username", "pass");

if ($_SERVER['REQUEST_METHOD'] == "GET") {

    if ($_GET['url'] == "auth") {

    } else if ($_GET['url'] == "users") {

    }

} else if ($_SERVER['REQUEST_METHOD'] == "POST") {

    if ($_GET['url'] == "auth") {
            $postBody = file_get_contents("php://input");
            $postBody = json_decode($postBody);

            $username = $postBody->username;
            $password = $postBody->password;

            if ($db->query('SELECT username FROM users WHERE username=:username', array(':username'=>$username))) {
                    if (password_verify($password, $db->query('SELECT password FROM users WHERE username=:username', array(':username'=>$username))[0]['password'])) {
                            $cstrong = True;
                            $token = bin2hex(openssl_random_pseudo_bytes(64, $cstrong));
                            $user_id = $db->query('SELECT id FROM users WHERE username=:username', array(':username'=>$username))[0]['id'];
                            $db->query('INSERT INTO login_tokens VALUES (0, :token, :user_id)', array(':token'=>sha1($token), ':user_id'=>$user_id));
                            echo '{ "Token": "'.$token.'" }';
                    } else {
                            http_response_code(401);
                    }
            } else {
                    http_response_code(401);
            }

    }

} else if ($_SERVER['REQUEST_METHOD'] == "DELETE") {
if ($_GET['url'] == "auth") {
  if (isset($_GET['token'])) {
    $db->query('DELETE FROM login_tokens WHERE token=:token', array(':token'=>$_GET['token']));
    echo '{ "Status": "Success" }';
    http_response_code(200);
  } else {
    http_response_code(400);
    echo '{ "Error": "Mal-formed request" }';
  }
  }

} else {
    http_response_code(405);
}
?>

这是我的web.config:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
    <rewrite>
        <rules>
            <rule name="API">
                <match url=".*" />
                <action type="Rewrite" url="index.php?url={R:0}" appendQueryString="false" />
            </rule>
        </rules>
    </rewrite>
    <modules>
        <remove name="WebDAVModule" />
    </modules>
    <handlers>
        <remove name="WebDAV" />
    </handlers>
    <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>
</system.webServer>

0 个答案:

没有答案