PHP-如何获取404页面的来源网址?

PHP-如何获取404页面的来源网址?

瑾兮 发布于 2017-04-16 字数 194 浏览 1245 回复 5

我们需要用数据库记录用户访问我们网站时的404页面的地址,比如用户访问的地址是http://www.xxx.com/not/exist/page,这是个不存在的页面,PHP如何获取到该地址并记录呢?我们的web服务器采用的是Nginx

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

灵芸 2017-10-04 5 楼

如果你有服务器权限,直接分析Nginx的日志就行了,一条404请求的日志如下所示:

60.247.113.42 - - [07/Jul/2011:17:46:29 +0800] "GET /aaaaaaaa HTTP/1.1" 404 169 "-" "Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0"

另外Nginx的404页面是可用自定义的,在自定义的404页里,你可以通过Ajax或者其他方式记录来记录当前的网址。

fastcgi_intercept_errors on;
server
{
listen 80;
server_name www.XXX.com;
index index.html index.htm index.php;
error_page 404 = /404.htm;
include location.conf;
root /home/www/logs;
}

404页的代码可以通过js获取网址传到指定的php页面:

<script type="text/javascript">
document.write('<script type="text/javascript" src="/test.php?ref='+location.href+'"></script>');
</script>

test.php是你要记录404访问网址的php程序,可用获取访问的网址:

<?php
$url = $_GET["ref"];
//....do something
?>

不过经过测试,发现上面的自定义404页的方法还是挺有弊端的,会受浏览器的设置影响,像我的ie浏览器就会跳到ie自己的404页,根本不会显示上面我们自定义的页面,所以建议最好还是直接分析Nginx的日志

灵芸 2017-07-04 4 楼

404页面是可以定做的,当请求页面不存在时,自动跳转到404页面显示,这时候可以将跳转过来的地址记录。
步骤:

创建自己的404.html页面
更改nginx.conf在http定义区域加入:fastcgi_intercept_errors on;
更改nginx.conf在server 区域加入:error_page 404 = /404.html

注意事项:
1、必须要添加:fastcgi_intercept_errors on;如果这个选项没有设置,即使创建了404.html和配置了error_page也没有效果。
2、自定义的404页面必须大于512字节,否则IE可能会出现默认的404页面。

另外一种方法,可以使用rewrite重定向:

if (!-e $request_filename) {//找不到地址
//可以获取$request_uri,这个就是请求的url地址
rewrite ^(.*)$ /404.html last;
}

甜柠檬 2017-06-25 3 楼

我觉的其实也很简单,通过分析访问日志,写个脚本也很方便,首先找到 http状态码为 404 的记录再匹配referer;为了匹配简单可以自定义下日志的格式,
将$status 和 $http_referer 放在最容易匹配的位置,如末尾。。

瑾兮 2017-05-27 2 楼

在Web服务器软件(Nginx)写一个抓包软件,分析用户和服务器交互的HTTP协议,HTTP头中的响应码字段为404则记录到数据库。

虐人心 2017-05-03 1 楼

各种入口:web服务器入口、框架路由转发入口、404提示页面入口。。。