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网站上
上一篇: SERVER['REQUEST
下一篇: Is Port Number Required in HTTP "Host" Header Parameter?