通过带有最后访问URL的电子邮件报告错误404 - php

我正在制作一个带有按钮的页面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
});

一些建议采取最后访问的URL在erro.php页面上,以通过电子邮件发送?

参考方案

因为您仍然愿意使用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

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

大部分重写指令都来自以下问题:htaccess errordocument 404 and pass url to path
有关在php中设置响应代码的更多信息:http://php.net/manual/en/function.http-response-code.php
mod_rewrite备忘单:http://www.cheatography.com/davechild/cheat-sheets/mod-rewrite/
mod_rewrite上的官方文档:http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html

PHP-将日期插入日期时间字段 - php

我已在数据库中使用datetime字段存储日期,使用PHP将“今天的日期”插入该字段的正确方法是什么?干杯, 参考方案 我认为您可以使用php date()函数

PHP-如何获取类的成员函数列表? - php

如果我知道班级的名字。有没有办法知道类的成员函数列表? 参考方案 get_class_methods()是你的朋友

php ziparchive类源代码 - php

Improve this question 我如何获取ziparchive类本身的源代码。 参考方案 假设您在谈论PHP ZipArchive class:下载PHP source code并查找适当的文件。如果您希望源代码是PHP代码,您可能会感到失望,因为源代码是用C语言编写的。或者,也可以在PHP Github Development Reposito…

PHP getallheaders替代 - php

我正在尝试从服务器上的apache切换到nginx。唯一的问题是我在PHP脚本中使用的getallheaders()函数,该函数不适用于Nginx。我已经尝试过用户在getallheaders函数上的php站点上提供的注释,但这并不返回所有请求标头。请告诉我如何解决这个问题。我真的想切换到Nginx。 参考方案 您仍然可以使用它,但是您必须像这里一样重新定义…

PHP-如何建议搜索字词,“你是说……?” - php

当使用不检索任何结果的术语搜索数据库时,我想允许“您是不是……”建议(例如Google)。例如,如果有人寻找“ jquyer””,它将输出“ did you mean jquery?”当然,建议结果必须与数据库内部的值匹配(我正在使用mysql)。您知道可以做到这一点的图书馆吗?我已经用谷歌搜索过,但是没有找到任何好的结果。或者,也许您有一个想法,该如何独自…