【问题标题】:$_SERVER["SCRIPT_URL"]: when is it reliably present?$_SERVER["SCRIPT_URL"]:它何时可靠存在?
【发布时间】:2026-02-09 21:20:06
【问题描述】:

在我的本地环境中(Apache 2.2.26 上的 PHP 5.4.24)$_SERVER["SCRIPT_URL"] 存在,但我读到这个变量并不总是存在,即使我无法确切找到它的确切时间和时间不是。

我想知道这个变量需要什么才能可靠地存在。

【问题讨论】:

    标签: php compatibility server-variables


    【解决方案1】:

    只有在启用 mod_rewrite 时才可用:

    http://httpd.apache.org/docs/2.0/rewrite/rewrite_intro.html#EnvVar

    【讨论】:

    • 不,即使没有 mod_rewrite,它们也存在,即使您不使用 Apache 也存在。不是每个人都使用 Apache!
    • 当然你可以用其他软件模拟现场,但是mod_rewrite是原始来源。我假设问题是,如果代码使用该字段,代码将停止工作的情况是什么。
    • 你们说的都对,对不起。如果你点击编辑按钮,我会将我的短板投票改为积极的
    • 似乎有其他东西可以最终确定是否设置了这些环境变量。我有三台 Apache/mod_rewrite 服务器,但 SCRIPT_URLSCRIPT_URI 只设置在其中一台上?
    • 在一些旧代码上寻找一个新错误,似乎即使启用了 mod_rewrite,我曾经去年在服务器上也有 $_SERVER['SCRIPT_URL'],现在我做到了不是!不得不切换到 REQUEST_URI
    【解决方案2】:

    这个变量很大程度上取决于服务器的配置。

    例如,当将 nginx 与 php5-fpm (fcgi) 一起使用时,您可以将变量作为 fpm_parameter 传递:

    fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
    

    scgi 也有类似的配置。

    $_SERVER中有3种全局变量,有些取自客户端的请求头,不可靠,有些是PHP/Webserver设置的(例如REMOTE_ADDR)非常可靠,有些依赖根据您的配置,这可能是可靠的,具体取决于该配置。

    【讨论】:

      最近更新 更多