【问题标题】:report error 404 by email with last accessed URL使用上次访问的 URL 通过电子邮件报告错误 404
【发布时间】:2015-05-01 13:00:45
【问题描述】:

我正在制作一个带有按钮的页面 404,供用户报告该网站有问题。这个想法是当用户点击按钮时,我会收到一封电子邮件,其中包含访问的最后一页的信息......

问题是我正在使用 php 变量 '$_SERVER['HTTP_REFERER']' 并且这会返回一个空值。我发现了这个问题 (In what cases will HTTP_REFERER be empty),我得出的结论是这个变量不是解决方案。

这是我的 .htacess

RewriteEngine on
ErrorDocument 404 http://example.com/erro.php
#ErrorDocument 404 /erro.php #this doesnt work... redirect doesnt work

在页面 erro.php 上,我有带有功能电子邮件的代码,这些代码可以正常工作,但我需要某种方式来获取最后访问的页面,该页面会产生错误。

在页面 erro.php 我正在尝试使用:

echo $_SERVER['HTTP_REFERER']; // return null value
echo $_SERVER['REQUEST_URI']; // return page http://example.com/erro.php

我尝试使用 jQuery (https://stackoverflow.com/a/2415645/2761794):

页面上的erro.php

$(document).ready(function() {
    var referrer =  document.referrer;
    alert(referrer); // return null value
});

一些建议将页面 erro.php 上的最后访问 URL 用于通过电子邮件发送?

【问题讨论】:

  • 让用户报告错误真的没有意义。他们更有可能按下后退按钮。在服务器上使用您的错误日志
  • 看不到日志,我工作的地方每天要管理很多站点,做更多的站点,所以盯着日志是不可行的。
  • 设置 cron 作业然后读取日志
  • 感谢您的建议,但现在这并不是我真正想要的。

标签: php jquery email http-status-code-404 http-referer


【解决方案1】:

由于您无论如何都愿意与mod_rewrite 合作并拥有PHP,因此方法略有不同。

首先,您可以检测到针对不存在的文件或目录的请求,然后通过重写将其传递给PHP 脚​​本。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
Rewriterule ^(.*) /erro.php?error_path=$1 [R=301,L]

根据您的具体设置,您可能需要将最后一行调整为

Rewriterule ^(.*) http://example.com/erro.php?error_path=$1 [R=301,L]

我发现mod_rewrite 有点类似于伏都教,有时可能需要一点“尝试一下,看看有什么用”。

然后在您的erro.php 文件中:

<?php
    $badfile = $_GET['error_path']; // the URL that 404'd
    http_response_code(404); // send the 404 header code
    // ... your other code

访问者的最终结果应该几乎相同,但您可以访问所需的数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-23
    • 2012-09-08
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多