2015-07-13 3 views
1

Недавно я начал использовать AWS Amazon для веб-хостинга, и моя форма для контактов с HTML, похоже, больше не работает, возвращается с этой ошибкой при нажатии кнопки отправки.amazon aws 405 метод не допускается при отправке формы

<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> 

мой HTML:

<div class="email-form"> 
    <form id="ajax-contact" method="post" action="mailer.php"> 
     <div class="flex-input-wrap"> 
      <input type="text" placeholder="Name" name="name" id="name" class="flex-input-1" required=""> 
      <input type="email" placeholder="Email" name="email" id="email" class="flex-input-2" required=""> 
     </div> 
     <textarea type="text" placeholder="Enter text" name="message" id="message" required=""></textarea> 
     <button type="submit" class="submit-button">Send message</button> 
    </form> 
    <div id="form-messages"></div> 
</div> 

ЯШ:

$(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.") 
     }) 
    }) 
}); 

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 = "[email protected]"; 
     $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."; 
    } 
?> 

есть некоторый тип установки, что я не хватает в AWS?

благодарит заранее.

ответ

0

Угадав, что вы статически размещаете свой index.html в S3, а POST на самом деле отправляется на S3, который отклоняет его, а не на ваш PHP-сервер.

+0

Я вижу! мне нужно установить AWS SDK для PHP? https://aws.amazon.com/sdk-for-php/ – replicant129

+0

@xenerr Если бы моя догадка была правильной (это?), то ваша проблема прямо сейчас заключается в том, что веб-страница загружается из S3, поэтому формы представления возвращаются к S3. Вероятно, вы должны иметь веб-страницу, обслуживаемую вашим сервером, а не S3, после чего формы будут возвращены на ваш сервер. Или вы можете придерживаться S3 и пытаться заставить представления формы перейти на ваш сервер с помощью XHR и, возможно, CORS на вашем сервере. – jarmod

Смежные вопросы