You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何配置.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

火山引擎 最新活动