Я видел много ответов на это, но почему-то никто из них не работал на меня. У меня есть форма на веб-сайте, который должен получать данные POST в php-файл (который затем отправит PHPMailer).HTACCESS и AJAX POST
Я хочу, чтобы на веб-сайте был установлен WWW и удалены расширения .php из URL-адреса. Я уже внесли некоторые изменения в файл .htaccess, отлаживая эту проблему.
Я также заметил, что, когда я перехожу на страницу на своем веб-сайте, например. http://example.com.au/contact
, тогда WWW не будет принужден к началу URL-адреса. Но если я перейду на http://example.com.au
(индекс), то он изменится на http://www.example.com.au
. Как я могу изменить .htaccess, чтобы я мог получить все подстраницы, чтобы заставить WWW, а также не удалять значения POST?
Мой текущий .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]
я изначально имел R=301
тег с [L]
второго RewriteRule
, но, видимо, это было причиной потери значения POST, так что я удалил это. Я также пробовал как с, так и без
RewriteCond %{REQUEST_METHOD} !POST
перед тем как один, так и ни один из правил.
Вот упрощенная версия моей формы (без классов начальной загрузки и т.д.):
<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>
я попробовал вид действие, так и без расширения .php, и с и без полного URL, все возвращающие пустые массивы для var_dump($_POST)
.
Все входы в форме имеют как name
теги, так и id
теги.
JQuery (ж/Validate) Сценарий:
$('#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);
}
});
}
});
Валидатор делает работу; форма не будет отправляться с пустыми вводами.
Для целей отладки, я изменил contact_send.php
к этому:
<?php
var_dump($_POST);
?>
Я действительно надеюсь, что кто-то может помочь мне, я теряю ум с этой проблемой!
Спасибо!
Вы - мой спаситель. Я не могу вас поблагодарить! Вы абсолютно правильно относились к сериализации данных перед удалением формы. Спасибо огромное! – jacobian