Htaccess Rewrite вызывает проблемы с данными формы, когда файл имеет более одного уровня глубины

Я пытался изучить htaccess для создания удобных URL-адресов. У меня есть URL-адреса, работающие нормально, но мои контактные формы, которые на одну php-страницу больше, чем уровень глубины, например, в http://www.example.com/category/item-1/, не передают данные формы получателю почты - формы в http://www.example.com/contact/ передают данные просто отлично.

Я предполагаю, что, возможно, часть javascript, где он вызывает php (url: «/php/form-process.php»), переписывается моим любительским htaccess и поэтому вызывает проблему?

Если кто-то может дать несколько советов о том, как лучше всего разрешить передачу данных, я был бы очень признателен, так как я очень новичок в htaccess!

Я думал, что, возможно, нашел ответ здесь (Похоже, что значения POST теряются при использовании .htaccess RewriteRule. Значения GET в порядке. Как исправить?), но добавление решения в мой htaccess, похоже, не решает проблему.

это мой htaccess в корневом каталоге:

Options +MultiViews
RewriteEngine On

# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1/ [R=307,L]

# To internally forward /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ $1.php [L,R=307]

RewriteCond %{HTTP_HOST} !^www.example.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=307]

#configure 404
ErrorDocument 404 /404.php

#forward .es to .com
RewriteCond %{HTTP_HOST} ^example\.es$ [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.es$
RewriteRule ^/?$ "http\://www\.example\.com/es/" [R=307,L]

это мой код формы php в «http://www.example.com/category/item-1/»:

<form role = "form" id = "contactForm" data-toggle = "validator" class = "shake">
<div class = "form-group">
<div class = "controls">
<input type = "hidden" id = "reference" value = "<?php echo htmlencode($propertyRecord['reference']) ?>" >
</div>
</div>
<div class = "form-group">
<div class = "controls">
<input type = "text" id = "name" placeholder = "Name (required)" required data-error = "Please enter your name">
<div class = "help-block with-errors"></div>
</div>
</div>

<div class = "form-group">
<div class = "controls">
<input type = "email" class = "email" id = "email" placeholder = "Email (required)" required data-error = "Please enter your email">
<div class = "help-block with-errors"></div>
</div>
</div>

<div class = "form-group">
<div class = "controls">
<input type = "text" id = "msg_subject" placeholder = "Phone (optional)">
<div class = "help-block with-errors"></div>
</div>
</div>

<div class = "form-group">
<div class = "controls">
<textarea id = "message" rows = "7" placeholder = "Message (required)" required data-error = "Please enter your message message"></textarea>
<div class = "help-block with-errors"></div>
</div>  
</div>

<button type = "submit" id = "submit" class = "btn-system btn-small">Send</button>
<div id = "msgSubmit" class = "h3 text-center hidden"></div> 
<div class = "clearfix"></div>   

</form>

<script type = "text/javascript" src = "/js/contact-form-script.js"></script>

это файл javascript в "/js/contact-form-script.js":

$("#contactForm").validator().on("submit", function (event) {
    if (event.isDefaultPrevented()) {
        // handle the invalid form...
        formError();
        submitMSG(false, "Did you fill in the form properly?");
    } else {
        // everything looks good!
        event.preventDefault();
        submitForm();
    }
});


function submitForm(){
    // Initiate Variables With Form Content
    var name = $("#name").val();
    var email = $("#email").val();
    var msg_subject = $("#msg_subject").val();
    var message = $("#message").val();
    var reference = $("#reference").val();


    $.ajax({
        type: "POST",
        url: "/php/form-process.php",
        data: "name = " + name + "&email = " + email + "&msg_subject = " + msg_subject + "&message = " + message + "&reference = " + reference,
        success : function(text){
            if (text == "success"){
                formSuccess();
            } else {
                formError();
                submitMSG(false,text);
            }
        }
    });
}

function formSuccess(){
    $("#contactForm")[0].reset();
    submitMSG(true, "- Message Sent -")
}

function formError(){
    $("#contactForm").removeClass().addClass('shake animated').one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', function(){
        $(this).removeClass();
    });
}

function submitMSG(valid, msg){
    if (valid){
        var msgClasses = "h4 text-center fadeIn animated text-success";
    } else {
        var msgClasses = "h4 text-center text-danger";
    }
    $("#msgSubmit").removeClass().addClass(msgClasses).text(msg);
}

это файл php "/php/form-process.php":

<?php

$errorMSG = "";

$EmailTo = "[email protected]";
$Subject = "Website Enquiry // Ref: $reference // From $name - $email";

// prepare email body text
$Body = "";
$Body .= "Reference: ";
$Body .= $reference;
$Body .= "\n";
$Body .= "Name: ";
$Body .= iconv('utf-8', 'iso-8859-1', $name);
$Body .= "\n";
$Body .= "Email: ";
$Body .= $email;
$Body .= "\n";
$Body .= "Phone: ";
$Body .= $msg_subject;
$Body .= "\n";
$Body .= "Message: ";
$Body .= iconv('utf-8', 'iso-8859-1', $message);
$Body .= "\n";


// send email
$success = mail($EmailTo, $Subject, $Body, "From:".$email);

// redirect to success page
if ($success && $errorMSG == ""){
   echo "success";
}else{
    if ($errorMSG == ""){
        echo "Something went wrong :(";
    } else {
        echo $errorMSG;
    }
}

?>

Заранее большое спасибо за помощь!

Это чудо, что эти правила не вызывают бесконечный цикл перенаправления. Это выглядит довольно собранным вместе. Вместо того, чтобы комментировать отсутствие комментариев, позвольте мне просто поднять непопулярную опцию нет, выполняющую переписывание URL-адреса Любые.

mario 10.03.2019 16:24

Привет, Марио, да, ты прав, это довольно сложно, так как я здесь очень новичок. Насколько я вижу, у меня нет проблем с сайтом, и удобные для пользователя ссылки работают везде, но я думаю, что мой htacess определенно не самый эффективный способ его написания. Я добавил комментарии, которые должны были быть включены ранее. Большое спасибо за ссылки на редактирование, они определенно помогут мне в обучении.

creativo digital 10.03.2019 17:10

С этими файлами .htaccess помните, что меньше значит больше. Посмотрите документацию Вордпресс .htaccess для примера и узнайте, как умно они использовали всего несколько строк, чтобы передать это.

dmanexe 10.03.2019 18:11
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
4
164
0

Другие вопросы по теме