My PHP app is not working because of $_SERVER['REQUEST_URI'] returns the full url to the script instead of a relative path.
My environment:
Windows 7 64 bit.
XAMPP Version 1.8.2
PHP Version 5.4.16
Apache Version Apache/2.4.4 (Win32) OpenSSL/0.9.8y PHP/5.4.16
My Virtual Host Conf:
<VirtualHost *:80>
DocumentRoot "D:/HTDOCS/ivankristianto"
ServerName www.ivankristianto.local
UseCanonicalName Off
<Directory "D:/HTDOCS/ivankristianto">
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Require all granted
</Directory>
</VirtualHost>
I created a basic script to test the $_SERVER content:
echo '$_SERVER[\'HTTP_HOST\'] : ' . $_SERVER['HTTP_HOST'];
echo '<br/>' . '$_SERVER[\'PHP_SELF\'] : ' . $_SERVER['PHP_SELF'];
echo '<br/>' . '$_SERVER[\'REQUEST_URI\'] : ' . $_SERVER['REQUEST_URI'];
And here is the result:
// URL: http://localhost/ivankristianto/request.php
$_SERVER['HTTP_HOST'] : localhost
$_SERVER['PHP_SELF'] : /ivankristianto/request.php
$_SERVER['REQUEST_URI'] : /ivankristianto/request.php //This is correct
And
// URL: http://www.ivankristianto.local/request.php
$_SERVER['HTTP_HOST'] : www.ivankristianto.local
$_SERVER['PHP_SELF'] : /request.php
$_SERVER['REQUEST_URI'] : http://www.ivankristianto.local/request.php //This is wrong
I didn't use any proxy, all I did is just set it in my /etc/hosts.
I have spent hours to find out why this is happens and have been search through google and this website, but cannot find any clue.
Can you please point me out what's wrong?
Thanks.
Ivan
I believe you're receiving the desired effect of creating a virtual host:
No Virtual Host:
/ivankristianto/request.php
With Virtual Host:
http://www.ivankristianto.local/request.php
http://www.ivankristianto.local
- I think this seems wrong to you because it contains http://www
and .local
- you could change this to just invankristano
and your REQUEST_URI
would output the same as if you had no virtual host. It's representing the path to your request.php - that you've set in the hosts file and is therefore valid part of the URI.
So basically what I'm saying is there's nothing wrong.
If it's causing you problems, then one solution would be to determine which environment you're in - e.g
if($_SERVER['HTTP_HOST'] == 'www.ivankristianto.local') {
$dev_env = TRUE;
}else {
$dev_env = FALSE;
}
then somewhere use that:
if($dev_env) {
$_SERVER['REQUEST_URI'] = str_replace($_SERVER['HTTP_HOST'],'',$_SERVER['REQUEST_URI']);
}
update
try changing host conf to:
<VirtualHost *:80>
DocumentRoot "D:/HTDOCS/ivankristianto"
ServerName ivankristianto.local
UseCanonicalName Off
<Directory "D:/HTDOCS/ivankristianto">
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Require all granted
</Directory>
</VirtualHost>
(remove www. from ServerName)