Htaccess:触发php或写入日志

时间:2011-07-21 21:27:09

标签: php apache .htaccess mod-rewrite redirect

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

我试图重定向并调用rewritemap只是为了触发一个php文件但是,它只会引发500错误。

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

您对此有任何想法或建议吗?

先前谢谢你

一切顺利,

埃姆雷

4 个答案:

答案 0 :(得分:2)

您可以使用RewriteLog来记录对文件的重写操作 - 这可以由Apache完成,而无需调用PHP。

=>蛮快 ;但只记录到文件,而不是数据库;仍然如你所说,日志处理可以延迟,并通过从crontab运行的脚本来完成。


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

答案 1 :(得分:1)

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

    RewriteEngine On
    RewriteRule /foo http://www.example.com [R=301,E=redirected]

    CustomLog /path/to/log combined env=redirected

'combined'是默认日志格式,但您可以define your own

答案 2 :(得分:1)

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

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

显然,如果你对数据库很灵活,你可以使用Couchbase风格的解决方案,它基本上让你有速度写入memcache而不将信息存储在易失性存储器中,但我猜你已被锁定进入你目前正在使用的数据库。

答案 3 :(得分:0)

你可能想要尝试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。

祝你好运