Htaccess:触发php或写入日志


Htaccess: Trigger php or write to log

我想要一个尽可能快的重定向。所以我决定使用htaccess重定向,因为它甚至在php解释器初始化之前就响应了。但我想记录重定向,并写一些东西到数据库。

我尝试重定向和调用rewritemap只是为了触发一个php文件,但是,它只抛出一个500错误。

如果我可以创建一个日志文件,即使日志处理会延迟,我也可以。重要的只是:快速重定向,跟踪/记录重定向。

你对此有什么想法或建议吗?

谢谢你在前面

一切顺利,

埃姆雷

您可以使用 RewriteLog 将重写操作记录到文件中——这将由Apache完成,而无需调用PHP。

=>相当快;但日志只记录到一个文件,而不是数据库;但是,正如您所说,日志处理可以延迟,并且可以通过从crontab运行的脚本来完成。


另请参见RewriteLogLevel,以配置该日志的详细程度。

可以在apache/vhost配置中使用,但不能在.htaccess中使用(所以如果你可以把它放在那里,记得重新加载apache):

    RewriteEngine On
    RewriteRule /foo http://www.example.com [R=301,E=redirected]
    CustomLog /path/to/log combined env=redirected

'组合式'是默认的日志格式,但您可以定义自己的

如果您的目标只是通过日志记录尽可能快,那么主要关注的是将磁盘I/O保持在最低限度。依靠.htaccess,您可以对URL的每个级别(http://muffinresearch.co.uk/archives/2008/04/07/avoiding-the-use-of-htaccess-for-performance/)进行目录扫描。

如果你可以在Apache的配置文件中设置你的RewriteRule,并将你的重定向指向一个PHP文件,那么你可以让PHP运行w/APC,并将日志记录到一个memcache对象。这样,您的整个客户端的访问可以完全发生在快速访问内存中,并且您可以有一个cron-job,它可以常规地从memcache中获取数据并将其推送到数据库(这样您仍然有长期存储,但客户端的访问不应该需要读取磁盘)。

显然,如果你在数据库上是灵活的,你可以使用couchbase风格的解决方案,本质上让你有写memcache的速度,而不将信息存储在易失性内存中,但我猜你被锁定到你目前使用的数据库。

你可能想尝试一个apache日志到mysql模块,像这样:http://www.outoforder.cc/projects/apache/mod_log_sql/下面是debian的操作指南http://www.howtoforge.com/apache2-logging-to-a-mysql-database-with-mod_log_sql-on-debian-etch

但是我不能100%确定这在最新的apache上是否有效。

好运