HTACCESS und AJAX POST

Ich habe gesehen, dass viele Antworten auf diese, aber aus irgendeinem Grund keiner von Ihnen haben für mich gearbeitet. Ich habe ein Formular auf einer Webseite muss, dass POST-Daten an eine php-Datei (die dann senden Sie eine PHPMailer).

Möchte ich die website WWW gezwungen und haben die .php-Erweiterungen entfernt aus der URL. Ich habe bereits einige änderungen vorgenommen, um meine .htaccess-Datei, während Debuggen das problem.

Hab ich auch gemerkt, dass wenn ich eine Seite auf meiner website, z.B. http://example.com.au/contact, dann WWW nicht gezwungen werden, an den Anfang der url. Aber wenn ich gehen, um http://example.com.au (index), dann wird sich das ändern, um http://www.example.com.au. Wie kann ich das ändern .htaccess so, dass ich alle Unterseiten zu zwingen, WWW, zusammen mit nicht dem entfernen POST-Werte?

Meine aktuelle .htaccess:

RewriteEngine on

# Remove .php
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule !.*\.php$ %{REQUEST_FILENAME}.php [QSA,L]

# Force WWW
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L]

Ursprünglich hatte ich eine R=301 tag mit der [L] des zweiten RewriteRule, aber anscheinend war die Ursache von Verlust-POST-Werte, so dass ich entfernt, die. Ich habe auch beides ausprobiert, mit und ohne

RewriteCond %{REQUEST_METHOD} !POST
bevor beide, der eine, und weder die Regeln.

Hier ist eine vereinfachte version von meinem Formular (ohne bootstrap-Klassen, usw.):

<div class="form_container">
   <form name="contactForm" id="contact_form" action="http://www.*MyURL*.com.au/scripts/contact_send" method="POST">
     <div class="row">
         <div>
             <label for="inputFirstName">First Name: </label>
             <input name="firstname" id="inputFirstName" type="text" required>
         </div>
         <div>
             <label for="inputSurname">Surname: </label>
             <input name="surname" id="inputSurname" type="text" required>
         </div>
     </div>
     <div class="row">
         <div>
             <label for="inputEmail">Email: </label>
             <input name="email" id="inputEmail" type="email" required>
         </div>
         <div>
             <label for="inputPhone">Phone (optional): </label>
             <input name="phone" id="inputPhone" type="tel">
         </div>
     </div>
     <div class="row">
         <div>
             <input type="submit" name="submit" value="Send">
         </div>
     </div>
   </form>
</div>

Ich habe versucht, die form der Aktion, sowohl mit als auch ohne .php-Erweiterung, und beide mit und ohne die vollständige URL, werden alle Rücksendung von leeren arrays für var_dump($_POST).

Alle Eingaben in der form haben beide name tags und id tags.

jQuery (w/validate) – Skript:

$('#contact_form').validate({

   ...

   submitHandler: function(form){

       $('.form_container').html('<div class="loader"></div>');
       $('html, body').animate({scrollTop: $('#header').height()}, 500);

       $.ajax({

           url: form.action,
           type: form.method,
           data: $('#contact_form').serialize(),
           success: function(data) {
               $('.form_container').html(data);
           }

       });
   }
});

Den validator funktioniert; das Formular wird nicht reichen mit leeren Eingänge.

Zum Zwecke der Fehlerbeseitigung, ich habe mich verändert contact_send.php dieser:

<?php
   var_dump($_POST);
?>

Ich hoffe wirklich, dass mir jemand helfen kann, bin ich verliere meinen Verstand mit diesem problem!!!

Dank!

InformationsquelleAutor jacobian | 2017-02-20



One Reply
  1. 2

    Solange Sie nur umschreiben, statt R|redirect, die URL, die im browser dargestellt wird sich nicht ändern. Jedoch, eine Umleitung status 301 oder 302 (Standard) verursacht eine änderung in der request-Methode auf GET.

    Wenn Sie möchten, um die Methode die gleiche ist, müssen Sie verwenden Sie das status-codes 307

    307 Temporary Redirect (seit HTTP/1.1)

    In diesem Fall, wird die Anfrage wiederholt werden soll, mit einer anderen URI; jedoch werden die künftigen Anforderungen sollte immer noch die original-URI. Im Gegensatz zu, wie 302 war historisch umgesetzt, die Anfrage-Methode ist nicht erlaubt, geändert werden, wenn der Neuauflage von der original-Anfrage. Zum Beispiel, eine POST-Anforderung wiederholt werden soll, mit einem anderen POST-Anfrage.

    und 308

    308 Permanent Redirect (RFC 7538)

    Der Antrag und allen zukünftigen Anforderungen wiederholt werden soll, mit einem anderen URI. 307 und 308 parallele der Verhaltensweisen von 302 und 301, aber erlauben nicht die HTTP-Methode zu ändern. So, zum Beispiel, ein Formular zu einer dauerhaft umgeleitet Ressource kann weiterhin reibungslos.


    Also statt

    RewriteCond %{HTTP_HOST} !^www\.
    RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L]

    sollten Sie verwenden

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

    halten die POST-Methode.


    Ich schaue nicht auf den Javascript-Teil zuerst, untersuchte es näher zeigt

    $('.form_container').html('<div class="loader"></div>');
    //...
    $.ajax({
        //...
        data: $('#contact_form').serialize(),
        //...
    });

    Den code entfernt zunächst die form und dann versucht zu Holen, werden die Eingaben mit serialize(). Da die form nicht mehr da ist, keine $_POST Daten übertragen werden können.

    Vielleicht Holen die form-Daten zuerst, hilft hier, z.B.

    var form_data = $('#contact_form').serialize();
    $('.form_container').html('<div class="loader"></div>');
    //...
    $.ajax({
        //...
        data: form_data,
        //...
    });
    • Sie sind mein Retter. Ich kann Ihnen nicht genug danken!! Du hattest absolut Recht mit der Serialisierung der Daten vor dem entfernen der form. Vielen, vielen Dank!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.