SERVER ['REQUEST

最近我正在寻求一种方法来正确确定协议,在这个协议下url请求被提供给服务器。

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

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

print_r($_SERVER);
?>

输出:

[REQUEST_SCHEME] => http

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

我在Windows下使用VC9 PHP 5.4.14 TS进行开发。 但我的作品在Ubuntu下。 Q#2:这个属性是否也可以在ubuntu linux下使用?


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


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

我只有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环境。 这对于分布式代码来说可能不是一个好的解决方案,但它可以满足我的需求。


    我也找不到对REQUEST_SCHEME的引用,但是如果您想要确定请求是由http:还是https:那么您可以使用$_SERVER['HTTPS'] ,它被设置为非- 如果请求是通过https:进行的,则为空值。 它在这里记录在PHP网站上

    链接地址: http://www.djcxy.com/p/7295.html

    上一篇: SERVER['REQUEST

    下一篇: Is Port Number Required in HTTP "Host" Header Parameter?