请告诉我,如果我得到一个变量$var
,它返回:http://foo.com
- 那我怎么能检查这个uri是否与$referrer
返回的相同(假设有一个) ,如果$referrer = http://foo.com/oof/
或更长时间,或者它的第一部分......?
有(更好的方法吗?):
$referrer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
基本上我想要一个if / else案例,因为当uri匹配时以及它没有匹配时。
如果你愿意,我也想知道如何使它成为黑客安全的,这样当$referrer
假的时候就不会被欺骗:http://badsite.com/file.php?param1=http://foo.com
,所以这里http://foo.com
部分不会被视为合法匹配。
非常感谢!
答案 0 :(得分:1)
非常字面意思:
if( substr($referrer, 0, strlen($var)) == $var)
"如果引荐来源开头的子字符串与搜索字词的长度相同,则等于搜索字词..."
在某些情况下,推荐人可能不会以您可能期望的小写字母发送。为了考虑这种情况,请考虑尝试:
if( strcasecmp( substr($referrer, 0, strlen($var)), $var) == 0)
这会对引荐来源与搜索字词的开头进行不区分大小写的比较。
答案 1 :(得分:1)
仅检查域:
$yoursite = ""; //Your site url without http:// or www.
$yoursite2 = ""; //Type your domain with www. this time
$referer = $_SERVER['HTTP_REFERER'];
$domain = parse_url($referer);
if($domain['host'] == $yoursite || $domain['host'] == $yoursite2) {
//Run your code here normally
}