如何检测传出链接(apache、php..)

如何检测传出链接(apache、php..),php,apache,hyperlink,external,Php,Apache,Hyperlink,External,我正在开发一个网站,但在某一点上,我需要检测我网站上的传出链接,或者禁止这些链接,或者接受这一点,我不知道facebook是如何做到这一点的,但他们可以通过facebook.com/l.php做到这一点,如果链接被标记为垃圾邮件,用户将得到通知 我不知道这是php还是htaccess,它使用DOMDOCUMENT在php中工作,但这不是真正的解决方案。这不是在Apache或级别上解决的问题。基本上,无论何时输出链接,都要检查它是否是外部的,如果是外部的,就将目标更改为重定向器 重定向程序可以检查

我正在开发一个网站,但在某一点上,我需要检测我网站上的传出链接,或者禁止这些链接,或者接受这一点,我不知道facebook是如何做到这一点的,但他们可以通过facebook.com/l.php做到这一点,如果链接被标记为垃圾邮件,用户将得到通知


我不知道这是php还是htaccess,它使用DOMDOCUMENT在php中工作,但这不是真正的解决方案。

这不是在Apache或
级别上解决的问题。基本上,无论何时输出链接,都要检查它是否是外部的,如果是外部的,就将目标更改为重定向器


重定向程序可以检查传递的URL,如果它被标记为恶意,它可以显示一条消息,如果不是,它可以自动重定向或显示某种形式的通知,表明您正在离开网站。

l.php
是一个通过
$\u GET['u']
读取链接的脚本。通过手中的url,您可以决定将客户端重定向到何处


因此,看起来,您希望用户教您的应用程序什么是垃圾邮件,什么不是。为此,您需要在url旁边添加一个“报告垃圾邮件”按钮。

我不能100%确定Facebook是如何实现它的,但我建议使用JQuery(或另一个javascript库)重写所有指向验证PHP脚本(例如Facebook的l.PHP脚本)的外部链接,并将预期url作为GET参数传递

使用JQuery,它可能看起来像:

$('a[href]').each(function(){
  var safe_href = 'http://yourdomain.com/yourscript.php?url='+$(this).attr('href');
  $(this).attr('href', safe_href);
});

然后,您可以基于变量
$\u GET['url']
在yourscript.php中执行数据库查找,如果安全,则重定向到该url,如果不安全,则显示消息。

我尝试检查链接,并可以在输出前使用preg\u match检测传出链接,但我找不到检测和替换它们的方法,我不是使用正则表达式的专家,知道吗?@Emad:我不会用正则表达式来代替它们;一旦检测到链接是外部链接,请执行类似于
$url=“/r?u=”的操作。rawurlencode($url)
(其中
/r
是重定向器的URL)我的问题就在这后面一步,只要我捕获所有链接,我就可以按我想要的方式处理它们,但我无法获取这些链接,因此基本上它与服务器有关,php无法在您通过链接离开页面之前捕获您,除非将此链接修改为类似于href=“x”的其他内容,否则它将变成href=“l.php?to=x”,这是我不想要的。我想知道客户背后发生了什么。