如何捕获和记录使用 PHP 发生的任何 301 重定向 (.htaccess)

How to capture and log any 301 redirects (.htaccess) that happen using PHP

我的 .htaccess 文件中设置了一堆 301 重定向。 我想做的是跟踪使用重定向的次数,以便更好地管理它们。

有没有办法捕获和记录与 PHP 发生的 301 重定向匹配?

换句话说,如果重定向是:

RewriteRule ^about/bozo$ /about [R=301,L]

有没有办法在每次使用 PHP 时捕获“about/bozo”? (即使重定向是由 htaccess 调用处理的,而不是由 PHP header 重定向处理的)

您无法使用 PHP 记录在 Apache 请求中 较早 触发的 3xx 重定向(例如,在 .htaccess 中)。 PHP.

完全看不到重定向

您不能使用 HTTP Referer 来确定是否发生了重定向,因为浏览器保留了初始请求(如果有)的 Referer

触发 3xx 重定向的请求应记录在服务器的访问日志中。

您可以使用 PHP 执行此操作的唯一方法是,如果您以某种方式(可能使用查询字符串)标记 重定向的 URL 并且在您的 PHP 脚本中检查这一点。例如:

RewriteRule ^about/bozo$ /about?redirected=true [R=301,L]

...但这可能是不可取的。

怀特先生的回答是正确的,您在 PHP 中看不到这些重定向。但是,您不需要使用 PHP 来获取您想要的统计数据。

如果您想要统计这些重定向发生的频率,您可以从网络服务器的 access_log 文件中获取它们。无论重定向是由 .htaccess 还是 PHP 触发的,每个 301 重定向都应该在日志文件中添加一个条目。这样的日志条目应如下所示:

127.0.0.1 - - [01/Jan/2000:11:55:36 -0700] "GET /about/bozo HTTP/1.1" 301 456

您可以使用命令行工具来计算重定向:

grep '" 301 ' /var/log/apache2/access_log | wc -l

grep 'GET /about/bozo ' /var/log/apache2/access_log | wc -l

其中 grep 过滤日志文件,wc -l 计算行数。