![](/img/trans.png)
[英]How to make all HTTP requests go through HTTPS using .htaccess or PHP
[英]Logging all HTTP requests using .htaccess and PHP
我需要在我的網站上放置一個php腳本來記錄所有HTTP請求。 access.log
沒有足夠的信息來建議我。
我的想法是在/www/
上使用.htaccess
並使用重寫規則對通過php腳本保存的每個請求傳遞一個日志。 (類似於print_r($_GLOBALS)
)
你們中有人知道更好的方法嗎?
我知道這是一個老問題。 如您所建議,如果您使用共享主機,則可能僅限於必須通過腳本重定向所有流量。
我不得不做一次。 對於一個遭到黑客攻擊的WordPress網站,我需要確定其受到的攻擊方式。 就像您說的,我將所有帶有.htaccess文件的請求重定向到一個PHP腳本,該腳本將呈現一個簡單的“站點正在維護”頁面,但該請求也將記錄該請求-帖子數據,Cookie,上傳文件名-我想觀察的任何東西。
方便的是,該站點也處於Cloudflare的保護之下。 因此,通過這樣做,Cloudflare最終在維護頁面上看到503 Unavailable(不可用),而轉為緩存,從而使站點幾乎完全啟動。 更好的是,維護頁面仍然能夠記錄請求。
我的.htaccess文件顯示如下:
RewriteEngine On RewriteRule ^index-maintenance\.php$ - [L] RewriteRule .* /index-maintenance.php [L]
然后, index-maintenance.php
文件如下所示:
<?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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.