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']

根据您的需要,我将使用以下选项之一:

  • 脚本文件位置的$\u服务器['PHP\u SELF']
  • $\u SERVER['SERVER\u NAME']作为主机名
  • 编辑:也许PHP_SELF不是最好的。如有疑问,请参阅备注。

    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”。