Php 提交表单时不允许使用amazon aws 405方法

Php 提交表单时不允许使用amazon aws 405方法,php,amazon-web-services,amazon-s3,Php,Amazon Web Services,Amazon S3,最近,我开始使用亚马逊的AWS进行网络托管,我的HTML联系人表单似乎不再有效,当单击submit按钮时出现此错误 <html> <head><title>405 Method Not Allowed</title></head> <body> <h1>405 Method Not Allowed</h1> <ul> <li>Code: MethodNotAllowed<

最近,我开始使用亚马逊的AWS进行网络托管,我的HTML联系人表单似乎不再有效,当单击submit按钮时出现此错误

<html> <head><title>405 Method Not Allowed</title></head> <body> <h1>405 Method Not Allowed</h1> <ul> <li>Code: MethodNotAllowed</li> <li>Message: The specified method is not allowed against this resource.</li> <li>Method: POST</li> <li>ResourceType: OBJECT</li> <li>RequestId: A8750F9D0586C1E5</li> <li>HostId: FHjhs//WnJVj8GLE/hKVzkaIBq9DRuhNJxObJ8eARsvAbURpWS87tWivbIsCGnzAeFne9lLLvNI=</li> </ul> <hr/> </body> </html>
mailer.php文件:

<?php
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
        $name = strip_tags(trim($_POST["name"]));
        $name = str_replace(array("\r","\n"),array(" "," "),$name);
        $email = filter_var(trim($_POST["email"]), FILTER_SANITIZE_EMAIL);
        $message = trim($_POST["message"]);
        if ( empty($name) OR empty($message) OR !filter_var($email, FILTER_VALIDATE_EMAIL)) {
            http_response_code(400);
            echo "Oops! Did you forget to fill out something? Try again.";
            exit;
        }
        $recipient = "myemail@gmail.com";
        $subject = "New email from $name";
        $email_content = "Name: $name\n";
        $email_content .= "Email: $email\n\n";
        $email_content .= "Message:\n$message\n";
        $email_headers = "From: $name <$email>";
        if (mail($recipient, $subject, $email_content, $email_headers)) {
            http_response_code(200);
            echo "Thanks! Your message was sent.";
        } else {
            http_response_code(500);
            echo "Oops! Something went wrong and your message couldn't be sent.";
        }
    } else {
        http_response_code(403);
        echo "There was a problem with your message, please try again.";
    }
?>

猜测您已经在S3中静态托管了index.html,而帖子实际上将被S3拒绝,而不是被PHP服务器拒绝。

猜测您已经在S3中静态托管了index.html,帖子实际上将被S3拒绝,而不是被PHP服务器拒绝。

我明白了!我需要为PHP安装AWS SDK吗@如果我的猜测是正确的(是吗?),那么你现在的问题是网页是从S3加载的,所以表单提交返回S3。您可能应该让服务器而不是S3提供web页面,然后表单提交将返回到服务器。或者您可以坚持使用S3,并尝试使用XHR或服务器上的CORS强制表单提交到您的服务器。我明白了!我需要为PHP安装AWS SDK吗@如果我的猜测是正确的(是吗?),那么你现在的问题是网页是从S3加载的,所以表单提交返回S3。您可能应该让服务器而不是S3提供web页面,然后表单提交将返回到服务器。或者,您可以坚持使用S3,并尝试使用XHR和服务器上的CORS强制表单提交到服务器。
$(function () {
    var e = $("#ajax-contact"),
        a = $("#form-messages");
    $(e).submit(function (s) {
        s.preventDefault();
        var r = $(e).serialize();
        $.ajax({
            type: "POST",
            url: $(e).attr("action"),
            data: r
        }).done(function (e) {
            $(a).removeClass("error"), $(a).addClass("success"), $(a).text(e), $("#name").val(""), $("#email").val(""), $("#message").val("")
        }).fail(function (e) {
            $(a).removeClass("success"), $(a).addClass("error"), $(a).text("" !== e.responseText ? e.responseText : "Oops! An error occured and your message could not be sent.")
        })
    })
});
<?php
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
        $name = strip_tags(trim($_POST["name"]));
        $name = str_replace(array("\r","\n"),array(" "," "),$name);
        $email = filter_var(trim($_POST["email"]), FILTER_SANITIZE_EMAIL);
        $message = trim($_POST["message"]);
        if ( empty($name) OR empty($message) OR !filter_var($email, FILTER_VALIDATE_EMAIL)) {
            http_response_code(400);
            echo "Oops! Did you forget to fill out something? Try again.";
            exit;
        }
        $recipient = "myemail@gmail.com";
        $subject = "New email from $name";
        $email_content = "Name: $name\n";
        $email_content .= "Email: $email\n\n";
        $email_content .= "Message:\n$message\n";
        $email_headers = "From: $name <$email>";
        if (mail($recipient, $subject, $email_content, $email_headers)) {
            http_response_code(200);
            echo "Thanks! Your message was sent.";
        } else {
            http_response_code(500);
            echo "Oops! Something went wrong and your message couldn't be sent.";
        }
    } else {
        http_response_code(403);
        echo "There was a problem with your message, please try again.";
    }
?>