php - 通过包含上次访问 URL 的电子邮件报告错误 404

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

我正在制作一个带有按钮的 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 通过电子邮件发送的建议?

最佳答案

由于您无论如何都愿意使用 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

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

关于php - 通过包含上次访问 URL 的电子邮件报告错误 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29987309/

相关文章:

javascript - CORS 调用可以在 PHP 中工作,但不能在 javascript/jquery 中工作

jquery - 如何使用 jQuery UI selectMenu 小部件在下拉列表中创建 3 列?

jQuery放大和缩小可滚动div,当所有内容可见时消除滚动

ruby - 如何通过 gmail 帐户从 bash 发送电子邮件?

php - 显示类别的无限结构 --> 子类别 --> 等等?

php - MySQL 不返回索引 int

带有 % 的 PHP-SQL LIKE 子句

javascript - 在黑色背景外单击时关闭流行通讯表单?

html - 将个性化链接插入电子邮件中的 html 标签

php - 如何将以特定名称开头的 2 个帖子(已提交)值插入到同一表行,并循环以获得更多相同的结果?