使用.htaccess隐藏.php扩展名会将访客IP更改为服务器IP

时间:2013-11-21 17:10:05

标签: php apache .htaccess

我注意到当使用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?

2 个答案:

答案 0 :(得分:1)

首先回应deceze的评论 - 这很奇怪,我不认为这是由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吗?

答案 1 :(得分:0)

经过近4个小时的调查和努力工作。我想出了REMOTE_ADDR 实际上是不可信任的。但我尝试了别的东西,但它没有用。最后我知道$ _SERVER有一个数组。真的,这就是我做的事情

foreach($_SERVER as $key => $value){
echo $key.'_____'.$value."<br/>";
}

我找到了这个$ _SERVER ['HTTP_X_REAL_IP']; 它工作得很好。我希望这有助于其他人。