【问题标题】:custom 404 doesn't work properly自定义 404 无法正常工作
【发布时间】:2012-02-19 01:25:54
【问题描述】:

我在我的网站上使用此代码(它包含在 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 联系表格不起作用。

【问题讨论】:

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


    【解决方案1】:

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

    如果是ahornblume.ch/404.php,它将提交到 404.php 并且它会工作。

    ahornblume.ch/something的情况下,它会导致404错误,只会显示404.php页面,但表单帖子将被丢弃。

    要修复,请使用绝对路径指定操作/404.php

    【讨论】:

    • @Lorenz 添加操作后,它现在似乎可以在您的网站上运行?
    【解决方案2】:

    如果您包含联系表格,您可能需要先检查链接!这可能只是一个错误的链接。避免使用 action="../php/contact_form.php" 之类的东西。使用 include/require/require_once,我总是选择 $root = realpath($_SERVER["DOCUMENT_ROOT"]);require_once($root."/path/to/file/myfile.php"); 因此,如果显示联系表单但单击提交时没有任何反应,原因很可能是服务器找不到“操作”php 文件。你有两个选择: 1:使用完整链接代替&lt;form action="../your_file.php"&lt;form action="http://yoursite.com/path/to/your/file/yourfile.php" 2. 始终使用root 来进行include、require 和require_once,并使用$url=http://www.yoursite.com 之类的附加变量,并且每当您需要插入链接时,请使用PHP,如下所示:&lt;a href="&lt;?php echo $url."/path/otherfile.php";?&gt;"&gt;This is a link&lt;/a&gt;。这可能看起来很麻烦,但在某些情况下它会让你的生活更轻松。切换到 https 或任何类型的全局修改将意味着您只需更改 1 个变量 $url。然后每个链接都会自动更新。如果你知道你不需要这个,那么选项 1 就可以了。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2019-03-13
        • 2016-07-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-21
        • 2014-06-10
        • 2016-08-06
        相关资源
        最近更新 更多