使用.htaccess和PHP记录所有HTTP请求

使用.htaccess和PHP记录所有HTTP请求,php,apache,.htaccess,mod-rewrite,logging,Php,Apache,.htaccess,Mod Rewrite,Logging,我需要在我的网站上放一个php脚本来记录所有HTTP请求。access.log没有足够的信息用于我的建议 我的想法是在/www/上使用.htaccess,通过保存在一个日志中的php脚本对每个请求传递使用重写规则。(类似于打印($\u GLOBALS)) 你们有谁知道更好的方法吗?我知道这是个老问题。如果您使用的是共享主机,正如您所建议的,您可能只需要通过脚本重定向所有流量 我不得不这样做一次。对于一个遭到黑客攻击的WordPress网站,我需要确定它是如何被攻击的。就像你说的,我用一个.hta

我需要在我的网站上放一个php脚本来记录所有HTTP请求。
access.log
没有足够的信息用于我的建议

我的想法是在
/www/
上使用
.htaccess
,通过保存在一个日志中的php脚本对每个请求传递使用重写规则。(类似于打印($\u GLOBALS))


你们有谁知道更好的方法吗?

我知道这是个老问题。如果您使用的是共享主机,正如您所建议的,您可能只需要通过脚本重定向所有流量

我不得不这样做一次。对于一个遭到黑客攻击的WordPress网站,我需要确定它是如何被攻击的。就像你说的,我用一个.htaccess文件将所有请求重定向到一个PHP脚本,该脚本将呈现一个简单的“站点正在维护”页面,但这也将记录该请求—post数据、cookies、上载文件名—几乎是我想观察的任何内容

不过,方便的是,该站点也受到Cloudflare保护;因此,通过这样做,Cloudflare最终发现503在维护页面上不可用,并提供了缓存,从而使站点几乎完全正常运行。更好的是,维护页面仍然能够记录请求


我的.htaccess文件如下所示:

RewriteEngine On RewriteRule ^index-maintenance\.php$ - [L] RewriteRule .* /index-maintenance.php [L]
您到底想记录什么?用户代理、客户端ip、方法、完整的请求uri、cookies、post和get参数。我真的需要所有这些信息来了解我的服务器Apache Module mod_dumpio可以做到这一点,Apache自定义日志可以做到大部分。Dagon,问题是我不想编辑服务器的任何配置,我仅限于htaccess和php文件。有办法吗?是的,但是它的效率比在web服务器中使用工具要低一千倍 <?php $record = TRUE; // whether or not to record requests header('HTTP/1.1 503 Service Unavailable', TRUE, 503); header('Retry-After: 18000'); if($record) { // Get remote IP // If the site uses cloudflare, the true remote IP is served // in the HTTP_CF_CONNECTING_IP server var: $ip = isset($_SERVER['HTTP_CF_CONNECTING_IP']) ? $_SERVER['HTTP_CF_CONNECTING_IP'] : $_SERVER['REMOTE_ADDR']; ob_start(); // Request date / IP / URL echo date('Y-m-d H:i:s: ') . 'Remote IP: ' . $ip . ' - ' . $_SERVER['REQUEST_METHOD'] . ' ' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] . "\r\n"; // User agent echo $_SERVER['HTTP_USER_AGENT'] . "\r\n"; // If you needed all headers: # foreach(getallheaders() as $header => $value) # echo "$header: $value\r\n"; // If you wanted raw request data vs. parsed POST data: # $postdata = file_get_contents('php://input'); # if(strlen($postdata)) echo $postdata."\r\n"; // Post data / Cookies / Files if(count($_POST) || count($_COOKIE)) { ob_start(); echo "POST\n"; var_dump($_POST); echo "COOKIES\n"; var_dump($_COOKIE); echo "FILES\n"; var_dump($_FILES); $postdata = ob_get_clean(); echo str_replace("\n","\r\n",$postdata); } echo "\r\n"; // usage of random character string discourages guessing // the url if the directory is web-accessible; but, if at // all possible, make it inaccessible: file_put_contents('../requests_n5io09d21mkp.log',ob_get_clean(),FILE_APPEND); } // then, a simple maintenance page: ?> <!DOCTYPE html> <html> <head> <title>Site Under Maintenance</title> </head> <style type="text/css"> body { margin: 0; width: 100vw; height: 100vh; display: flex; justify-content: center; align-items: center; } .notice { color: #808080; font: bold 20px/1.6em sans-serif; text-align: center; } </style> <body> <p class="notice"> We're sorry. The site is under maintenance.<br/>Please check back later. </p> </body> </html>