SERVER['REQUEST
I recently was seeking a way to properly determine protocol, under which url request was supplied to the server.
I watched through parse_url() and though $_SERVER superglobal variable, and found this:
<?php
header('Content-Type: text/plain');
print_r($_SERVER);
?>
Output:
[REQUEST_SCHEME] => http
However, I was unable to find it on php.net or Google. Though, I was able to find this question. Q#1: If $_SERVER['REQUEST_SCHEME'] wasn't documented, then it is probably unreliable, or it can be trusted?
I'am using VC9 PHP 5.4.14 TS under windows for development. But my production is under ubuntu. Q#2: Is this property also availible under ubuntu linux too?
It is hard to prove that it is reliable, but it is easy to prove that it is not reliable (if only I could provide a case which it does not work). And I can prove that it is unreliable because it does not work with IIS 7.0 + PHP 5.3
The REQUEST_SCHEME environment variable is documented on the Apache mod_rewrite page. However, it didn't become available until Apache 2.4.
I only have Apache 2.2 so I created an environment variable. I added the following to the top of my .htaccess file.
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]
Now I can use
%{ENV:REQUEST_SCHEME} in other rewrite conditions and rules $_SERVER['REQUEST_SCHEME'] in my PHP code I don't have to do extra messy conditional checks everywhere, and my PHP code is forward compatible. When Apache is upgraded, I can change my .htaccess file.
I don't know how you'd apply this to a Windows environment. This is probably not a good solution for distributed code, but it works well for my needs.
I, too, couldn't find a reference to REQUEST_SCHEME , but if you're looking to determine whether a request was made by http: or https: then you can use $_SERVER['HTTPS'] , which is set to a non-empty value if a request was made by https: . It's documented on the PHP site here
下一篇: SERVER ['REQUEST
