我注意到,当使用Apache(htaccess)来隐藏.php扩展时,实际上正在更改$_SERVER['REMOTE_ADDR']的返回;从返回访问者IP到返回域或服务器IP。
RewriteBase /
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}'.php -f
RewriteRule ^(.*)$ $1.php
这就是我的htaccess文件所使用的而
<?php
echo $_SERVER['REMOTE_ADDR'];
?>
在我的php文件中是否有任何方法可以修复$_SERVER["REMOTE_ADDR"]作为访问者ip的返回?
首先回应decze的评论-这很奇怪,我不认为这是由Apache/htaccess规则引起的。还有更多的事情吗?
尝试使用:
if(isset($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARTDED_FOR'] != '') {
$ip_address = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip_address = $_SERVER['REMOTE_ADDR'];
}
echo $ip_address;
这至少能提供一个更准确的IP吗?
经过近4个小时的调查和艰苦工作。我发现REMOTE_ADDR实际上不能一直被信任。然而,我尝试了其他方法,但没有成功。最后我知道$_SERVER有一个数组。所以我就是这么做的
foreach($_SERVER as $key => $value){
echo $key.'_____'.$value."<br/>";
}
我找到了这个$_SERVER['HTTP_X_REAL_IP'];它工作得很好。我希望这能帮助其他人。