Ich habe eine Menge Antworten darauf gesehen, aber aus irgendeinem Grund hat keiner von ihnen für mich gearbeitet. Ich habe ein Formular auf einer Website, das Daten an eine PHP-Datei senden muss (die dann einen PHPMailer sendet).HTACCESS und AJAX POST
Ich möchte die Website WWW erzwungen haben und die .php Erweiterungen von der URL entfernt haben. Ich habe bereits einige Änderungen an meiner .htaccess-Datei vorgenommen, während ich dieses Problem behebt.
Ich habe auch festgestellt, dass, wenn ich auf eine Seite auf meiner Website, z. http://example.com.au/contact
, dann wird WWW nicht zum Start der URL gezwungen. Aber wenn ich auf http://example.com.au
(Index) gehe, dann wird es zu http://www.example.com.au
wechseln. Wie kann ich die .htaccess ändern, so dass ich alle Unterseiten erzwingen kann, um WWW zu erzwingen und POST-Werte nicht zu entfernen?
Mein aktuell .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]
Ich hatte ursprünglich einen R=301
-Tag mit den [L]
der zweiten RewriteRule
, aber anscheinend war eine Ursache für POST-Werte zu verlieren, so dass ich entfernt, dass. Ich habe auch sowohl mit als auch ohne
RewriteCond %{REQUEST_METHOD} !POST
vor beiden, einer, und keiner Regeln versucht.
Hier ist eine vereinfachte Version von meiner Form (ohne Bootklassen 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 die Form Aktion versucht haben, sowohl mit als auch ohne die Endung .php, und sowohl mit als auch ohne die volle URL, alle zurückkehrenden leeren Arrays für var_dump($_POST)
.
Alle Eingaben im Formular haben sowohl name
Tags als auch id
Tags.
jQuery (w/validate) Drehbuch:
$('#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);
}
});
}
});
Der Validator funktioniert; Das Formular wird nicht mit leeren Eingaben übergeben.
Zum Zweck der Fehlersuche habe ich contact_send.php
dazu geändert:
<?php
var_dump($_POST);
?>
Ich hoffe wirklich, dass jemand kann mir helfen, ich bin meinen Verstand mit diesem Problem zu verlieren!
Danke!
Sie sind mein Retter. Ich kann dir nicht genug danken !! Sie hatten absolut Recht damit, die Daten vor dem Entfernen des Formulars zu serialisieren. Ich danke dir sehr! – jacobian