htaccess Переписать, вызывая проблемы с данными формы, когда файл более одного уровня - PullRequest
1 голос
/ 10 марта 2019

Я пытался изучить 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 = "me@example.com";
$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;
    }
}

?>

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

...