NZT48

Продвинутый пользователь
Регистрация
04.10.2022
Сообщения
49
Реакции
14
Привет всем

Я пытаюсь сделать контактную форму (html, css, php) и получаю ошибку 405 not allowed, когда я нажимаю на кнопку для отправки сообщения. В папке "files" я создал папку "contact", куда поместил следующее:


contact.jpg

HTML:
<!DOCTYPE html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  <title>contact form</title>
</head>
<body>
  <link href="contact-form.css" rel="stylesheet">
  <div class="fcf-body">
    <div id="fcf-form">
      <h3 class="fcf-h3">Contact us</h3>
      <form id="fcf-form-id" class="fcf-form-class" method="post" action="contact-form-process.php">
        <div class="fcf-form-group">
          <label for="Name" class="fcf-label">Your name</label>
          <div class="fcf-input-group">
            <input type="text" id="Name" name="Name" class="fcf-form-control" required>
          </div>
        </div>
        <div class="fcf-form-group">
          <label for="Email" class="fcf-label">Your email address</label>
          <div class="fcf-input-group">
            <input type="email" id="Email" name="Email" class="fcf-form-control" required>
          </div>
        </div>
        <div class="fcf-form-group">
          <label for="Message" class="fcf-label">Your message</label>
          <div class="fcf-input-group">
            <textarea id="Message" name="Message" class="fcf-form-control" rows="6" maxlength="3000" required></textarea>
          </div>
        </div>
        <div class="fcf-form-group">
          <button type="submit" id="fcf-button" class="fcf-btn fcf-btn-primary fcf-btn-lg fcf-btn-block">Send Message</button>
        </div>
      </form>
    </div>
  </div>
</body>
</html>


PHP:
<?php
if (isset($_POST['Email'])) {

    // EDIT THE 2 LINES BELOW AS REQUIRED
    $email_to = "you@yourdomain.com";
    $email_subject = "New form submissions";

    function problem($error)
    {
        echo "We are very sorry, but there were error(s) found with the form you submitted. ";
        echo "These errors appear below.<br><br>";
        echo $error . "<br><br>";
        echo "Please go back and fix these errors.<br><br>";
        die();
    }

    // validation expected data exists
    if (
        !isset($_POST['Name']) ||
        !isset($_POST['Email']) ||
        !isset($_POST['Message'])
    ) {
        problem('We are sorry, but there appears to be a problem with the form you submitted.');
    }

    $name = $_POST['Name']; // required
    $email = $_POST['Email']; // required
    $message = $_POST['Message']; // required

    $error_message = "";
    $email_exp = '/^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/';

    if (!preg_match($email_exp, $email)) {
        $error_message .= 'The Email address you entered does not appear to be valid.<br>';
    }

    $string_exp = "/^[A-Za-z .'-]+$/";

    if (!preg_match($string_exp, $name)) {
        $error_message .= 'The Name you entered does not appear to be valid.<br>';
    }

    if (strlen($message) < 2) {
        $error_message .= 'The Message you entered do not appear to be valid.<br>';
    }

    if (strlen($error_message) > 0) {
        problem($error_message);
    }

    $email_message = "Form details below.\n\n";

    function clean_string($string)
    {
        $bad = array("content-type", "bcc:", "to:", "cc:", "href");
        return str_replace($bad, "", $string);
    }

    $email_message .= "Name: " . clean_string($name) . "\n";
    $email_message .= "Email: " . clean_string($email) . "\n";
    $email_message .= "Message: " . clean_string($message) . "\n";

    // create email headers
    $headers = 'From: ' . $email . "\r\n" .
        'Reply-To: ' . $email . "\r\n" .
        'X-Mailer: PHP/' . phpversion();
    @mail($email_to, $email_subject, $email_message, $headers);
?>

    <!-- include your success message below -->

    Thank you for contacting us. We will be in touch with you very soon.

<?php
}
?>

Когда я нажимаю на кнопку для отправки сообщения, я перенаправляюсь на эту страницу:

https://www.example.com/files/contact/contact-form-process.php и у меня появляется сообщение 405 not allowed.

Я попробовал добавить это в /home/example.com/config/production/nginx/conf.d/default.conf:

Код:
location /contact-form-process.php {
     allow all;
     root /home/example.com/files/contact/;
     proxy_pass http://example_com;
     proxy_redirect off;
     }

405.png

Но у меня все еще та же ошибка. Кто-нибудь знает, как решить эту проблему?

С уважением
 

Вложения

  • contact.jpg
    contact.jpg
    45,5 КБ · Просмотры: 2
Последнее редактирование:

admin

Администратор
Команда форума
Регистрация
30.09.2022
Сообщения
472
Реакции
85
Права на файл выдали?
 

NZT48

Продвинутый пользователь
Регистрация
04.10.2022
Сообщения
49
Реакции
14
Права на файл выдали?
Pазрешение файла contact-form-process.php равно 644. Я пробовал с 777, но это тоже не работает. Мне кажется, что это система блокирует php. В default.conf нет настроенного расширения php.

attributes.png

С уважением
 

NZT48

Продвинутый пользователь
Регистрация
04.10.2022
Сообщения
49
Реакции
14
Небольшое обновление: я установил php 8.1 и изменил этот код:

Код:
location /contact-form-process.php {
     allow all;
     root /home/example.com/files/contact/;
     proxy_pass http://example_com;
     proxy_redirect off;
     }

на этот:

Код:
location ~* ^/+files/+contact/+.*\.php {
    index  index.php index.html index.htm;
    allow all;
    proxy_pass http://example_com;
    proxy_redirect off;
    }

    location ~* \.php$ {
    fastcgi_index   index.php;
    fastcgi_pass unix:/run/php/php8.1-fpm.sock;
    include         fastcgi_params;
    fastcgi_param   SCRIPT_FILENAME    $document_root$fastcgi_script_name;
    fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;
    }

В:

Код:
server {
    listen 80;
    listen [::]:80;

    #ssl include /home/example.com/config/production/nginx/ssl.d/default.conf;

    root /home/example.com;

    server_name .example.com;

    access_log /var/log/nginx/access_example.com.log;

    include /etc/nginx/bots.d/ddos.conf;
    include /etc/nginx/bots.d/blockbots.conf;

    keepalive_timeout 10;
    client_max_body_size 64m;

    if ( $request_method !~ ^(GET|POST)$ ) {
        return 444;
    }

    if ( $request_uri ~ "/index.html" ) {
        rewrite ^(.*)/ $1/ permanent;
    }
        
    location ~* ^/+files/+contact/+.*\.php {
    index  index.php index.html index.htm;
    allow all;
    proxy_pass http://example_com;
    proxy_redirect off;
    }
    
    location ~* \.php$ {
    fastcgi_index   index.php;
    fastcgi_pass unix:/run/php/php8.1-fpm.sock;
    include         fastcgi_params;
    fastcgi_param   SCRIPT_FILENAME    $document_root$fastcgi_script_name;
    fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;
    }

[...]

Теперь вместо 405 not allowed у меня 404 страница cinemapress. Я думаю, что код конфигурации PHP, который я поместил в файл default.conf, не подходит.

С уважением
 

admin

Администратор
Команда форума
Регистрация
30.09.2022
Сообщения
472
Реакции
85
Возможно можно попробовать установить сайт например на поддомен, после чего обращаться к нему.
 

NZT48

Продвинутый пользователь
Регистрация
04.10.2022
Сообщения
49
Реакции
14
Возможно можно попробовать установить сайт например на поддомен, после чего обращаться к нему.
Спасибо, я посмотрю. Действительно да, это может быть решением для создания только страницы контактов на поддомене, чтобы обойти правила cinemapress в корне домена.

С уважением
 
Верх