2009-06-28 19 views
0

我有两个不同的域,指向我的主页在同一台服务器。如何记录每个访问我的网站与2个不同的域

我想记录对我的主页进行的每一次访问,并记录用户用来访问我的主页的哪个域,我该怎么做?

我尝试了Apache中的mod_rewrite并用PHP登录到MySQL数据库,但我所能做的只是无限循环。

任何想法?

编辑:
通过您的回答,我看你没有得到我想要的东西......

据我所知,谷歌Analytics(分析)不允许我区分域中,如果他们使用都指向相同的网站,它也不允许我看到像图片这样的文件直接访问而不是通过我的网页。

我不能仅仅使用$ _SERVER ['HTTP_HOST'],就像我刚才说的那样,我想记录每件事情,就像图像和所有其他文件一样,即使它不存在。

至于Webalizer,我从来没有看到它区分域,它总是假定帐户中的默认域配置,并使用它作为根,它甚至不显示它。我得检查一遍,但我不知道它会做我想做的......

的死循环:
我试着参与改写apche的网址用一个简单的重写规则的方法指向PHP脚本,PHP脚本会将条目记录到MySQL数据库中,并使用header()函数将用户发送回文件。事情是这样的:

的.htaccess:

RewriteCond %{HTTP_HOST} ^(www\.)?domain1\.net [NC] 
RewriteRule ^(.*)$ http://www.domain1.net/logscript?a=$1 [NC,L] 

RewriteCond %{HTTP_HOST} ^(www\.)?domain2\.net [NC] 
RewriteRule ^(.*)$ http://www.domain2.net/logscript?a=$1 [NC,L] 

PHP脚本:

所以,我访问了一些文件,点文件到PHP脚本,该脚本会日志并重定向到该文件...但是,当PHP重定向到该文件时,htaccess规则将会捡起并再次重定向PHP脚本,从而创建无限循环。

回答

2

最好的办法是解析服务器日志。那些将显示域和请求。即使大多数共享主机帐户也提供对日志的访问。

如果您打算改写路线,您可以使用RewriteCond检查HTTP_REFERER的值以查看引用者是否是本地链接。

RewriteCond %{HTTP_HOST} ^(www\.)?domain1\.net [NC] 
RewriteCond %{HTTP_REFERER} !^(.*)domain1(.*)$ [NC] 
RewriteRule ^(.*)$ http://www.domain1.net/logscript?a=$1 [NC,L] 

RewriteCond %{HTTP_HOST} ^(.*)domain2\.net [NC] 
RewriteCond %{HTTP_REFERER} !^(.*)domain2(.*)$ [NC] 
RewriteRule ^(.*)$ http://www.domain2.net/logscript?a=$1 [NC,L] 

您可能也想过帐在mod_rewrite论坛。他们有关于处理域的全部内容。

0

是否Google Analytics不提供此选项?或者你能否解析你的服务器日志文件?

+0

请检查编辑问题... – 2009-06-28 20:16:25

+0

不幸的是,我不知道如何在我目前的位置帮助你。您可以提出一个单独的问题,提供有关您的解决方案的无限循环问题的信息,我们可以从这个角度来处理它。感谢你的理解。 – 2009-06-28 20:37:54

+0

我再次编辑了上面的问题来解释无限循环。不需要再创建另一个问题。如果你想,只需在下面给出不同的答案。 – 2009-06-28 20:58:04

1

如果谷歌Analytics(分析)是不是你的东西,

$_SERVER['HTTP_HOST'] 

持有所使用的域名,你可以记录所(随着时间的推移,浏览器,文件路径等一起)。我认为不需要mod_rewrite。检查print_r($ _ SERVER)以查看可能有趣的日志记录。
确保仍然可以转义(mysql_real_escape_string())所有的日志值,例如通过浏览器的用户代理字符串注入SQL非常容易。


所以,我访问了一些文件,点文件到PHP脚本和脚本将记录并重定向到文件......然而,当PHP重定向到文件,htaccess的规则将挑选它再次重定向PHP脚本,创建一个无限循环。

您可以检查RewriteCond中的HTTP标头吗?如果是这样,尝试在PHP中重定向旁边设置额外的头文件(按照惯例,自定义HTTP头文件以'X-'开始,因此它可能是头文件('X-stayhere:1');),如果X-stayhere头文件是目前,RewriteCond失败,它不会将浏览器转发到PHP脚本。

但是,如果您可以cron脚本来下载服务器日志并通过一些免费软件日志文件分析器来运行它们,那么我会采用它。对于每个请求有两个重定向是一个相当大的开销..(如果我更清醒,我可能会想出不同的解决方案)

0

为什么不使用apache中的访问日志设施构建? Apache有一个“piped log”函数,允许您将访问日志重定向到任何程序。

CustomLog "|/path/to/your/logger" common 
相关问题