如何配置.htaccess实现WordPress站点访问时自动执行PHP脚本?
全局访问统计的最简实现方案
这问题我熟!针对WordPress站点的这种全局访问统计需求,最简的实现方式分两种情况,取决于你要不要统计静态资源(图片、CSS、JS等)的访问:
情况1:只统计PHP页面访问(覆盖WordPress核心请求)
如果你的统计需求只针对WordPress的页面、文章这些PHP驱动的内容,用Apache的auto_prepend_file指令是最简单的——它会让每个PHP脚本执行前自动运行你的统计脚本,完全不用修改WordPress的任何代码。
步骤1:创建统计脚本
在站点根目录新建stats.php,写入以下代码(记得替换你的数据库信息):
<?php // 获取关键访问数据 $visitor_ip = $_SERVER['REMOTE_ADDR']; $requested_path = $_SERVER['REQUEST_URI']; $access_time = date('Y-m-d H:i:s'); // 连接数据库并插入记录(用预处理语句防止SQL注入) $db_conn = mysqli_connect('localhost', '你的数据库用户名', '你的数据库密码', '你的数据库名'); if (!$db_conn) { die("数据库连接失败: " . mysqli_connect_error()); } $stmt = $db_conn->prepare("INSERT INTO access_stats (ip_address, requested_path, access_time) VALUES (?, ?, ?)"); $stmt->bind_param("sss", $visitor_ip, $requested_path, $access_time); $stmt->execute(); // 清理资源 $stmt->close(); mysqli_close($db_conn); ?>
步骤2:配置.htaccess
打开WordPress根目录的.htaccess文件,在默认的WordPress重写规则之前添加以下配置:
<IfModule mod_php.c> # 替换成你stats.php的绝对路径,比如/var/www/your-site/stats.php php_value auto_prepend_file "/path/to/your/site/stats.php" </IfModule>
提示:如果不知道绝对路径,可以在WordPress后台新建一个临时PHP文件,输出
echo __DIR__;来获取站点根目录的绝对路径。
情况2:统计所有请求(包括静态资源、目录)
如果需要统计所有访问(比如图片、CSS、JS甚至不存在的路径),就得用mod_rewrite把所有请求转发到统计脚本,处理完统计逻辑后再返回原请求的内容。
步骤1:修改统计脚本
更新stats.php,在统计逻辑后添加返回原内容的代码:
<?php // 先执行统计逻辑(和情况1的代码一致) $visitor_ip = $_SERVER['REMOTE_ADDR']; $requested_path = $_GET['requested'] ?? $_SERVER['REQUEST_URI']; $access_time = date('Y-m-d H:i:s'); // 数据库插入代码...(同上) // 返回原请求的内容 $full_path = $_SERVER['DOCUMENT_ROOT'] . '/' . ltrim($requested_path, '/'); if (file_exists($full_path)) { // 设置正确的MIME类型,保证浏览器能正常解析资源 $mime_type = mime_content_type($full_path); header("Content-Type: $mime_type"); // 输出文件内容 readfile($full_path); } else { // 处理404请求 header("HTTP/1.0 404 Not Found"); echo "404 Not Found"; } exit; ?>
步骤2:配置.htaccess
在.htaccess的最顶部添加以下重写规则:
RewriteEngine On # 排除统计脚本本身,避免无限循环 RewriteCond %{REQUEST_URI} !^/stats\.php$ # 将所有请求转发到stats.php,保留原请求路径和参数 RewriteRule ^(.*)$ /stats.php?requested=$1 [L,QSA]
注意:这种方式会让所有请求都经过PHP处理,小流量站点没问题,但大流量站点可能需要考虑性能优化(比如缓存统计数据、用异步插入数据库)。
关键注意事项
- 确保
stats.php的文件权限正确(通常设置为644,Apache用户能读取) - 数据库操作一定要用预处理语句,防止SQL注入
- 如果用
auto_prepend_file,统计脚本里不要输出任何内容(比如echo、var_dump),否则会破坏WordPress的页面输出 - 测试时可以先在统计脚本里写日志文件(比如
file_put_contents('access.log', $log . PHP_EOL, FILE_APPEND);),确认脚本确实在运行
内容的提问来源于stack exchange,提问作者Eibo - Sistemas Web




