$_SERVER['REQUEST_SCHEME'] 可靠吗?

2022-08-30 10:39:47

我最近正在寻找一种方法来正确确定协议,根据该协议向服务器提供url请求。

我通过parse_url()观察了$_SERVER超全局变量,并发现了这个:

<?php

header('Content-Type: text/plain');

print_r($_SERVER);

输出:

[REQUEST_SCHEME] =>

但是,我无法在 php.net 或Google上找到它。不过,我能够找到这个问题问题#1:如果没有记录在案,那么它可能是不可靠的,或者它可以被信任?$_SERVER['REQUEST_SCHEME']

我正在使用Windows进行开发。但我的生产是在ubuntu下进行的。问题#2:这个属性在 ubuntu linux 下也可用吗?VC9 PHP 5.4.14 TS


答案 1

环境变量记录在 Apache mod_rewrite页面上。但是,它直到Apache 2.4才可用。REQUEST_SCHEME

我只有Apache 2.2,所以我创建了一个环境变量。我将以下内容添加到.htaccess文件的顶部。

RewriteEngine on

# Set REQUEST_SCHEME (standard environment variable in Apache 2.4)
RewriteCond %{HTTPS} off
RewriteRule .* - [E=REQUEST_SCHEME:http]

RewriteCond %{HTTPS} on
RewriteRule .* - [E=REQUEST_SCHEME:https]

现在我可以使用

  • %{ENV:REQUEST_SCHEME}在其他重写条件和规则中
  • $_SERVER['REQUEST_SCHEME']在我的 PHP 代码中

我不必到处做额外的混乱的条件检查,而且我的PHP代码是向前兼容的。当Apache升级时,我可以更改我的.htaccess文件。

我不知道你如何将其应用于Windows环境。对于分布式代码来说,这可能不是一个好的解决方案,但它很适合我的需求。


答案 2

很难证明它是可靠的,但很容易证明它不可靠(如果我能提供一个它不起作用的情况)。我可以证明它是不可靠的,因为它不适用于IIS 7.0 + PHP 5.3。


推荐