Php $服务器[“脚本”URI]不工作?可供替代的
这很奇怪,但由于某种原因,Php $服务器[“脚本”URI]不工作?可供替代的,php,Php,这很奇怪,但由于某种原因,$\u服务器[“SCRIPT\u URI”]在我位于子/子页面时不会返回域名,而只在主页上工作。不确定是由于脚本(WordPress)还是主机,但请您建议使用PHP检索域名的可靠解决方案?这可能是由于URL重写,如果您想要URL中调用的路径,您可以尝试使用$\u SERVER['REQUEST\u URI'] $_SERVER['HTTP_HOST'] 根据您的需要,我将使用以下选项之一: 脚本文件位置的$\u服务器['PHP\u SELF'] $\u SERVER[
$\u服务器[“SCRIPT\u URI”]
在我位于子/子页面时不会返回域名,而只在主页上工作。不确定是由于脚本(WordPress)还是主机,但请您建议使用PHP检索域名的可靠解决方案?这可能是由于URL重写,如果您想要URL中调用的路径,您可以尝试使用$\u SERVER['REQUEST\u URI']
$_SERVER['HTTP_HOST']
根据您的需要,我将使用以下选项之一:
var_dump($_SERVER);
var\u dump($\u服务器)
并查看什么适合您的需要
注意:使用未初始化的
$\u服务器[“PHP\u SELF”]
可能是一种错误。如果您的浏览器对JSON
文档进行了良好的格式化,并且没有输出,插入以下内容将导致比var\u dump
更可读的内容:
header('Content-Type: application/json');die(json_encode($_SERVER));
phpinfo() 此外,脚本\u URI不存在,正确的语法是请求\u URI:
echo$\u服务器[“请求URI”]代码>返回没有主机和域的整个路径。我在我的网站上使用了$\u服务器[SCRIPT\u URI]
还有许多子目录,如
多年来我一直没有遇到过这个问题,今天在一些没有分配$_SERVER[SCRIPT_URI]的站点上出现了一个错误。联系我的isp后,他们声称他们没有做任何更改,但$\u服务器[SCRIPT\u URI]不再工作。getenv('SCRIPT_URI')不会失败,但返回空字符串。我不知道为什么这么多年后会突然发生这种情况。最后我调用了一个函数,通过各种选项提取我想要的文件名。希望这涵盖一切。我在包含函数时遇到问题,但检查了
“脚本名称”
“PHP_SELF”
“脚本文件名”
“脚本_URI”
希望他的帮助
如果有人知道为什么脚本URI会突然停止工作,我很想知道。服务器当前运行的是Apache 2.4。延迟回复。我使用这段脚本在我的数据库中存储信息。希望这可能会对其他人有所帮助。如何从中获取您的完整url和客户端访问的ip地址
if (!empty($_SERVER['HTTP_CLIENT_IP'])){
$ip=$_SERVER['HTTP_CLIENT_IP'];
//Is it a proxy address
}elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
}else{
$ip=$_SERVER['REMOTE_ADDR'];
}
$url = $_SERVER['SERVER_NAME'].$_SERVER['SCRIPT_NAME'];
echo $ip;
echo "<br>";
echo $url;
if(!empty($\u SERVER['HTTP\u CLIENT\u IP'])){
$ip=$\服务器['HTTP\客户端\ ip'];
//是代理地址吗
}elseif(!empty($_服务器['HTTP\u X\u FORWARDED\u FOR'])){
$ip=$\服务器['HTTP\u X\u FORWARDED\u'];
}否则{
$ip=$\u服务器['REMOTE\u ADDR'];
}
$url=$\u服务器['SERVER\u NAME']。$\u服务器['SCRIPT\u NAME'];
echo$ip;
回声“
”;
echo$url;
在Apache上,脚本URI仅在启用mod_rewrite时存在
Apache要求:
重写_模块(注意:使用特定于平台的加载语法)
及
重新启动发动机
Apache配置文件中相应位置的语句
然后重新启动Apache,它应该可以正常工作。脚本URI
不受欢迎,因为当您的站点使用根域运行时,它没有任何价值。它只在您使用子目录时出现
当我们使用子目录时,HTTP\u HOST
不是一个好主意
使用以下代码获取脚本URI
:
$SCRIPT_URI = $_SERVER['REQUEST_SCHEME']."://".$_SERVER['HTTP_HOST'].'/'.ltrim(dirname($_SERVER['SCRIPT_URL']),'/');
如果您确实选择此方法,请注意它可能会受到请求头的影响。确实。有url重写。但我不想要路径,我只想检查域名。有什么办法吗?哦,此方法很好!!即使启用了url重写。谢谢您可能应该使用
$\u SERVER['SCRIPT\u name']
而不是PHP\u SELF。您可能一直在想$\u服务器['REQUEST\u URI']
@Kzqai脚本URI
在Apache文档中有文档记录,因此它应该出现在$\u服务器
超全局中。但是,正如OP所发现的,它并不总是被设置(无论出于什么原因)。请检查:SCRIPT\u URI
不一定是错误的。它在Apache文档中记录为。但是,正如OP所发现的,它并不总是被设置(无论出于何种原因)但是…设置时,它与REQUEST\u URI
不同SCRIPT\u URI
包含绝对URL,而REQUEST\u URI
是根相对URL(“没有主机和域”)这些链接看起来非常像垃圾邮件,请考虑将它们替换为泛型的代理,如代理转发的Expul.CimIF HTTP请求,即使原始的请求是由安全的http://TrasePraveTest.RealStestIf HTTP请求,也可以返回“HTTP”。