custom 404 не работает должным образом - PullRequest
0 голосов
/ 19 февраля 2012

Я использую этот код на своем веб-сайте (он включен в 404.php):

<?php 
if (isset($_POST["op"]) && ($_POST["op"]=="send")) { 

/******** START OF CONFIG SECTION *******/
  $sendto  = "myemail@gmail.com";
  $subject = "Website Contact Enquiry";

/******** END OF CONFIG SECTION *******/



  $message = $HTTP_POST_VARS['message']; 
  $headers = "From: $email\n";
  $headers . "MIME-Version: 1.0\n"
           . "Content-Transfer-Encoding: 7bit\n"
           . "Content-type: text/html;  charset = \"iso-8859-1\";\n\n";

$request = $_SERVER["REQUEST_URI"];
$self = $_SERVER["PHP_SELF"];
// Build the email body text
  $emailcontent = " 
----------------------------------------------------------------------------- 
   WEBSITE CONTACT ENQUIRY
----------------------------------------------------------------------------- 
$request
$self

$message


"; 
 if (!trim($message)) { 
  echo "<p>Please go back and type a Message</p><p><a href='javascript: history.go(-1)'>Click here to go back</a>.</p>"; 
}  


// Sends out the email or will output the error message 
 elseif (mail($sendto, $subject, $emailcontent, $headers)) { 
  echo "<br><br><p><b>Thank You </b></p><p>We will be in touch as soon as possible.</p>"; 

} 
} 
else { 
?>

А это моя форма

<form action="http://www.ahornblume.ch/404.php" method="post">
<INPUT NAME="op" TYPE="hidden" VALUE="send"> 
<textarea name="message" cols="25" rows="4" placeholder="Wenn Sie eine Antwort wünschen,  vergessen Sie bitte ihre email Adresse nicht."></textarea><br>
<input name="submit" type="submit" value="Send Message"> 
</form> 

Я перенаправляю все 404 ошибки в мой htaccess-файл следующим образом:

ErrorDocument 404 /404.php

Если я перехожу на ahornblume.ch/404.php, все работает, и я могу использовать форму для отправки писем. Но, если я перейду к ahornblume.ch/something, контактная форма не будет работать.

Ответы [ 3 ]

2 голосов
/ 19 февраля 2012

В вашей форме не указано действие, поэтому оно будет отправлено на URL, который использовался для отображения формы.

В случае ahornblume.ch/404.php он отправит 404.php и будет работать.

В случае ahornblume.ch/something это приведет к ошибке 404, которая просто отобразит страницу 404.php, но сообщение формы будет отклонено.

Чтобы исправить, укажите действие с абсолютным путем /404.php

0 голосов
/ 19 февраля 2012

Используете ли вы javascript / ajax / jquery для отправки формы? Если вы отправляете такой запрос на публикацию, проверьте ссылку в файле .js или там, где у вас есть код, и используйте абсолютный путь для запроса на отправку.

0 голосов
/ 19 февраля 2012

Если вы используете контактную форму, вы можете сначала проверить ссылки! Это, вероятно, просто неправильная ссылка. Избегайте использования таких вещей, как action = "../ php / contact_form.php". С помощью include / require / require_once я всегда выбираю $root = realpath($_SERVER["DOCUMENT_ROOT"]);require_once($root."/path/to/file/myfile.php"); Поэтому, если отображается контактная форма, но при нажатии кнопки «Отправить» ничего не происходит, скорее всего, причина в том, что сервер не может найти php-файл «action». У вас есть два варианта: 1: вместо <form action="../your_file.php" используйте полную ссылку. <form action="http://yoursite.com/path/to/your/file/yourfile.php" 2. Всегда используйте root для include, require и require_once и используйте дополнительную переменную, такую ​​как $url=http://www.yoursite.com, и всякий раз, когда вам нужно вставить ссылки, используйте PHP следующим образом: <a href="<?php echo $url."/path/otherfile.php";?>">This is a link</a>. Это может показаться большим количеством неприятностей, но в некоторых случаях это сделает вашу жизнь намного проще. Переключение на https или любое другое глобальное изменение будет означать, что вам нужно изменить только 1 переменную, $ url. Каждая ссылка будет автоматически обновлена. Если вы точно знаете, что вам это не нужно, подойдет вариант № 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...