使用.htaccess隐藏.php扩展将访问者IP更改为服务器IP


Using .htaccess to hide .php extension changes visitor IP to the server IP

我注意到,当使用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'];它工作得很好。我希望这能帮助其他人。