PHP-通过htaccess调用页面时获取IP
我有一个PHP网站,需要知道访问客户端的IP是什么。为此,我使用以下功能:PHP-通过htaccess调用页面时获取IP,php,.htaccess,get,ip,Php,.htaccess,Get,Ip,我有一个PHP网站,需要知道访问客户端的IP是什么。为此,我使用以下功能: function get_client_ip() { $ipaddress = ''; if (!empty($_SERVER['HTTP_CLIENT_IP'])) { $ipaddress = $_SERVER['HTTP_CLIENT_IP']; } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ip
function get_client_ip() {
$ipaddress = '';
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ipaddress = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ipaddress = $_SERVER['REMOTE_ADDR'];
}
return $ipaddress;
}
但是当通过url omenorpreco.com/teste访问站点时,页面返回服务器IP
当访问页面url omenorpreco.com/teste.php时,页面返回客户端IP
发生此错误的原因可能是,当您访问不带扩展名“.php”的页面时,服务器会通过.htaccess解释该页面
如何调整应用程序的两种访问,返回客户端的IP,而不是服务器IP
上面是我的访问代码
php\u值允许\u url\u打开 php\u值允许\u url\u包含1 重新启动发动机 重写cond%{REQUEST_FILENAME}-F 重写cond%{REQUEST_FILENAME}-D 重写规则!。(js | ico | txt | gif | bmp | jpeg | jpg | png | css | log | rss | zip | xml | sql | pdf | doc docx | xls)$url|u amigavel.php 重写规则sitemap categoria.xml$sitemap.php?number=categoria 重写规则站点地图-([0-9]+).xml$sitemap.php?编号=$1 重写规则sitemap_index.xml$sitemap_index.php 和url_amigavel.php代码
<?php
$geturl = explode( "/", str_replace( strrchr( $_SERVER["REQUEST_URI"], "?" ), "", $_SERVER["REQUEST_URI"] ) );
array_shift( $geturl );
$tipo = $geturl[0];
if ( is_file( "$tipo.php" ) )
{
include "$tipo.php";
}
else
{
echo "page not found";
}
?>
编辑:我可以使用客户端IP在HTACCESS中设置全局变量吗?将其放入一个文件中,并使用扩展名和不使用扩展名运行:
<?php
function get_ip_address() {
return $_SERVER['REMOTE_ADDR'];
}
echo get_ip_address();
?>
我想我刚刚看到它在你的服务器上工作! 将
.htaccess
更改为
php_value allow_url_fopen on
php_value allow_url_include 1
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !.(js|ico|txt|gif|bmp|jpeg|jpg|png|css|log|rss|zip|xml|sql|pdf|doc|docx|xls)$ url_amigavel.php
RewriteRule sitemap-categoria.xml$ sitemap.php?number=categoria
RewriteRule sitemap-([0-9]+).xml$ sitemap.php?number=$1
RewriteRule sitemap_index.xml$ sitemap_index.php
SetEnvIfNoCase Remote_Host "(.*)" HTTP_MY_REMOTE_HOST=$1
SetEnvIfNoCase Remote_Addr "(.*)" HTTP_MY_REMOTE_ADDR=$1
function get_client_ip() {
if (isset($_SERVER[REDIRECT_HTTP_MY_REMOTE_ADDR])) {
return $_SERVER[REDIRECT_HTTP_MY_REMOTE_ADDR];
} else if (isset($_SERVER[REDIRECT_HTTP_MY_REMOTE_HOST])) {
return $_SERVER[REDIRECT_HTTP_MY_REMOTE_HOST];
} else if (isset($_SERVER[HTTP_MY_REMOTE_ADDR])) {
return $_SERVER[HTTP_MY_REMOTE_ADDR];
} else if (isset($_SERVER[HTTP_MY_REMOTE_HOST])) {
return $_SERVER[HTTP_MY_REMOTE_HOST];
}
}
echo get_client_ip();
将test.php
更改为
php_value allow_url_fopen on
php_value allow_url_include 1
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !.(js|ico|txt|gif|bmp|jpeg|jpg|png|css|log|rss|zip|xml|sql|pdf|doc|docx|xls)$ url_amigavel.php
RewriteRule sitemap-categoria.xml$ sitemap.php?number=categoria
RewriteRule sitemap-([0-9]+).xml$ sitemap.php?number=$1
RewriteRule sitemap_index.xml$ sitemap_index.php
SetEnvIfNoCase Remote_Host "(.*)" HTTP_MY_REMOTE_HOST=$1
SetEnvIfNoCase Remote_Addr "(.*)" HTTP_MY_REMOTE_ADDR=$1
function get_client_ip() {
if (isset($_SERVER[REDIRECT_HTTP_MY_REMOTE_ADDR])) {
return $_SERVER[REDIRECT_HTTP_MY_REMOTE_ADDR];
} else if (isset($_SERVER[REDIRECT_HTTP_MY_REMOTE_HOST])) {
return $_SERVER[REDIRECT_HTTP_MY_REMOTE_HOST];
} else if (isset($_SERVER[HTTP_MY_REMOTE_ADDR])) {
return $_SERVER[HTTP_MY_REMOTE_ADDR];
} else if (isset($_SERVER[HTTP_MY_REMOTE_HOST])) {
return $_SERVER[HTTP_MY_REMOTE_HOST];
}
}
echo get_client_ip();
在.htaccess
中设置变量的灵感来自:
很高兴终于成功了 您已将.htaccess上的allow\u url\u include设置为1。这会造成问题,因为当你告诉PHP包含一个文件时,预处理器认为它是一个URL,其他人告诉过你这一点,所以让我们直说吧 我的猜测是,只需禁用允许url包含。这是一种不好的做法,是一种安全风险,例如,对于文件内容,没有什么不能做的 如果您仍然认为包含远程文件是一个好主意,那么您应该尝试使用完整路径,将此包含与Benjy1996提供的代码一起使用:
include(getcwd().$tipo..php”)代码>
PD:您可能应该将ip函数更改为只返回$\u SERVER['REMOTE\u ADDR'],因为它是您最信任的一个,因为它最难伪造。应用程序如何处理url路由的可能重复。@rjdown OP不是问如何?将.htaccess
文件内容添加到您的帖子中。似乎(通过一个URL上的1行和另一个URL上的2行的回音)路由到不同的脚本可能是一个问题。你可以发布URL\u amigavel.php
(URL\u-friendly.php)的内容吗?嗨,斯特雷多。你能进入这个页面吗?我将您的代码放入此页面进行测试。。访问并查看错误。。第一个链接回复一个正确的ip第二个链接返回一个服务器ip第二个链接通过htaccess访问test2.php页面。该网页不为我加载。你能再检查一下服务器设置吗?我修改了我的文件test2.php,结果是一样的。。你可以访问吗?我无法访问该页面,它显示“此网页不可用”。我可以访问它,IP地址问题仍然存在。似乎服务器发出了一个新的请求,或者url\u amigavel.php
做了一些重要的事情(被要求发布)。我认为剩余的斜杠可能是导致404
的原因,如果前一个答案不起作用,请尝试我的更新答案。尝试放置echo$tipo
在if
语句之前查看从$tipo请求文件的位置。php是您的get_client_ip函数所在的文件吗?嗯,似乎是对的,认为我的解决方案没有什么区别。最后!!!!!非常感谢你。当我在htaccess中设置变量时,我可以从客户端获得正确的IP。。非常感谢。您好Benjy/David-我试图更改我的htaccess,删除了两行php值设置,并输入代码include(getcwd().“/”$tipo..php”);进入url_amigavel.php,两个都不起作用=(我刚刚在我的服务器上复制了您的原始.htaccess
、test.php
和url\u amigavel.php
,它提供了预期的结果和功能。似乎某些地方必须进行不同的配置。哇=(你只是复制了我的原始文件?我访问了你的服务器,真的工作得很好..也许是服务器配置?是的,你的原始代码工作:)。这是某个地方的配置。你能想出任何可能导致此问题的原因吗?你正在使用的任何框架或其他已设置的配置?我想我可能已经找到了可能的原因,只需检查$\u服务器['HTTP\u X\u FORWARDED\u']
字段,忽略远程地址
,有时。htaccess
可以使用重写规则
更改此字段