自定义404无法正常工作

时间:2012-02-19 01:25:54

标签: php .htaccess http-status-code-404

我在我的网站上使用此代码(它包含在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> 

我正在重定向我的htaccess文件中的所有404错误,如下所示:

ErrorDocument 404 /404.php

如果我转到ahornblume.ch/404.php一切正常,我可以使用该表单发送电子邮件。 但是,如果我转到ahornblume.ch/something,则联系表格不起作用。

3 个答案:

答案 0 :(得分:2)

您的表单没有指定操作,因此它将提交到用于显示表单的网址。

如果是ahornblume.ch/404.php,它将提交给404.php,它会起作用。

如果是ahornblume.ch/something,则会导致404错误,只会显示404.php页面,但表单帖子将被丢弃。

要修复,请指定具有绝对路径/404.php

的操作

答案 1 :(得分:0)

如果您要包含联系表格,您可能需要先查看链接!这可能只是一个错误的链接。避免使用action =“../ php / contact_form.php”之类的东西。使用include / require / require_once,我总是选择$root = realpath($_SERVER["DOCUMENT_ROOT"]);require_once($root."/path/to/file/myfile.php"); 因此,如果联系表单正在显示,但是当您单击提交时没有任何反应,原因很可能是服务器找不到“动作”php文件。您有两种选择: 1:而不是<form action="../your_file.php"使用完整链接。 <form action="http://yoursite.com/path/to/your/file/yourfile.php" 2.始终使用root for 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号选项就可以了。

答案 2 :(得分:0)

您是否正在使用javascript / ajax / jquery进行表单提交?如果您发送类似的发布请求,请检查.js文件中的链接或您拥有代码的位置,并使用绝对路径作为发布请求。