zorro76
@zorro76

Как обойти ситуацию с ответом сервера HTTP/1.1 301 Moved Permanently?

Есть проект, в нем настроена почта с помощью Ajax, в корне проекта есть файл .htaccess вот такого характера:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^.*$ $0.php [L,QSA]
RewriteCond %{THE_REQUEST} ([^\s]*)\.php(\?[^\s]*)?
RewriteRule (.*) %1 [R=301,L]


который файлы с окончанием .php в браузере открывает вот так к примеру: titan.devruso.ru/contact
но проблема: в корне проекта к примеру есть файл mail.php, который отвечает за почтовый сервис:
<?php

$method = $_SERVER['REQUEST_METHOD'];

//Script Foreach
$c = true;
if ( $method === 'POST' ) {

  $project_name = trim($_POST["project_name"]);
  $admin_email  = trim($_POST["admin_email"]);
  $form_subject = trim($_POST["form_subject"]);

  foreach ( $_POST as $key => $value ) {
    if ( $value != "" && $key != "project_name" && $key != "admin_email" && $key != "form_subject" ) {
      $message .= "
      " . ( ($c = !$c) ? '<tr>':'<tr style="background-color: #f8f8f8;">' ) . "
      <td style='padding: 10px; border: #e9e9e9 1px solid;'><b>$key</b></td>
      <td style='padding: 10px; border: #e9e9e9 1px solid;'>$value</td>
    </tr>
    ";
  }
}
} else if ( $method === 'GET' ) {

  $project_name = trim($_GET["project_name"]);
  $admin_email  = trim($_GET["admin_email"]);
  $form_subject = trim($_GET["form_subject"]);

  foreach ( $_GET as $key => $value ) {
    if ( $value != "" && $key != "project_name" && $key != "admin_email" && $key != "form_subject" ) {
      $message .= "
      " . ( ($c = !$c) ? '<tr>':'<tr style="background-color: #f8f8f8;">' ) . "
      <td style='padding: 10px; border: #e9e9e9 1px solid;'><b>$key</b></td>
      <td style='padding: 10px; border: #e9e9e9 1px solid;'>$value</td>
    </tr>
    ";
  }
}
}

$message = "<table style='width: 100%;'>$message</table>";

function adopt($text) {
  return '=?UTF-8?B?'.base64_encode($text).'?=';
}

$headers = "MIME-Version: 1.0" . PHP_EOL .
"Content-Type: text/html; charset=utf-8" . PHP_EOL .
'From: '.adopt($project_name).' <'.$admin_email.'>' . PHP_EOL .
'Reply-To: '.$admin_email.'' . PHP_EOL;

mail($admin_email, adopt($form_subject), $message, $headers );


ну и сам Ajax запрос:
$("#contacts__form").submit(function() { //Change
        var th = $(this);
        $.ajax({
            type: "POST",
            url: "mail.php", //Change
            data: th.serialize()
        }).done(function() {
            $(".success").addClass("visible");
            setTimeout(function() {
                // Done Functions
                th.trigger("reset");
                $(".success").removeClass("visible");
            }, 3000);
        });
        return false;
    });

    $('.contacts__form').on('submit', function(){
        if ( $(this).find('input').val() ) {
            alert('Вашe cообщение отправлено, мы свяжемся с вами как можно скорее.');
        }
        return false;
    });


при отправке почты, получаю ответ сервера HTTP/1.1 301 Moved Permanently, проверял на другом сервере без файла .htaccess и с окончанием файлов .html - письмо пришло. Но вот в первом варианте с php файлами никак? Получается что .htaccess обрабатывает и mail.php? Что посоветуете сделать? Поиск в google как то проблему не особо решил. Спасибо за дельные советы.
  • Вопрос задан
  • 1603 просмотра
Пригласить эксперта
Ответы на вопрос 1
@lllypynby
PHP-Developer
Вы понимаете как работает apache?
Изначально он резолвит путь, в урле вашего запроса указан путь
url: "mail.php"

он делает редирект на /mail. А затем уже php обрабатывает запрос.
По коду. На дворе уже 2016 год, существуют PSR, по безопасности кот наплакал.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы