我有两个不同的域,它们都指向同一服务器中的主页。
我想记录对我主页的每次访问,并记录用户用来访问我主页的域名,我该怎么做?
我在Apache中尝试了mod_rewrite并使用PHP登录到MySQL数据库,但我所能做的就是无限循环。
有什么想法吗?
修改
根据你的回答,我发现你没有得到我想要的东西......
据我所知,Google Analytics不允许我区分正在使用的域名,如果它们都指向同一个网站,而且它也不允许我看到某些文件如图像是直接访问而不是通过我的网页
我也不能只使用$ _SERVER ['HTTP_HOST']因为我刚刚说过,我想记录所有事情,比如图像和所有其他文件,每一个请求,即使它不存在。
对于Webalizer,我从未看到它区分域,它总是假设帐户中的默认域配置并以root身份使用它,它甚至不显示它。我将不得不再次检查,但我不确定它会做我想要的......
INFINITE LOOP:
我尝试的方法涉及使用指向PHP脚本的简单重写规则重写Apche中的URL,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脚本:
$url = $_GET['a'];
$domain = $_SERVER['HTTP_HOST'];
// Code to log the entry into the MySQL database
header("Location: http://$domain/$url");
exit();
所以,我访问一些文件,将该文件指向PHP脚本,脚本将记录并重定向到该文件...但是,当PHP重定向到该文件时,htaccess规则将获取它并再次重定向PHP脚本,创建一个无限循环。
答案 0 :(得分: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论坛中发帖。他们有关于处理域的整个部分。
答案 1 :(得分:1)
如果Google 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脚本。
但是,如果您可以通过脚本来下载服务器日志并通过一些免费软件日志文件分析器运行它们,那么我会改用它。对每个请求进行两次重定向是一个相当大的开销..(如果我更清醒,我可能会提出不同的解决方案)
答案 2 :(得分:0)
Google Analytics不提供此选项吗?或者你能不解析你的服务器日志文件?
答案 3 :(得分:0)
为什么不在apache中使用访问日志工具? Apache有一个“piped log”函数,允许您将访问日志重定向到任何程序。
CustomLog "|/path/to/your/logger" common