$_SERVER[';REQUEST_URI';]返回完整的URL,而不是脚本的路径


$_SERVER['REQUEST_URI'] returns full URL instead of path to script

我的PHP应用程序不工作,因为$_SERVER['REQUEST_URI']返回脚本的完整url,而不是相对路径。

我的环境:
Windows 7 64位
XAMPP 1.8.2版
PHP版本5.4.16
Apache版本Apache/2.4.4(Win32)OpenSSL/0.9.8y PHP/5.4.16

我的虚拟主机配置:

<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>

我创建了一个基本脚本来测试$_SERVER内容:

echo '$_SERVER[''HTTP_HOST''] : ' . $_SERVER['HTTP_HOST'];
echo '<br/>' . '$_SERVER[''PHP_SELF''] : ' . $_SERVER['PHP_SELF'];
echo '<br/>' . '$_SERVER[''REQUEST_URI''] : ' . $_SERVER['REQUEST_URI'];

结果如下:

// 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

// 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

我没有使用任何代理,我所做的只是在我的/etc/hosts中设置它。

我花了几个小时来找出为什么会发生这种情况,并在谷歌和这个网站上进行了搜索,但找不到任何线索。

你能告诉我出了什么问题吗?

谢谢
Ivan

我相信您正在收到创建虚拟主机所需的效果:

虚拟主机:

/ivankristianto/request.php 

使用虚拟主机:

http://www.ivankristianto.local/request.php

http://www.ivankristianto.local-我认为这对你来说似乎是错误的,因为它包含http://www.local-你可以将其更改为只有invankristano,而你的REQUEST_URI将输出与你没有虚拟主机一样的内容。它表示您在hosts文件中设置的request.php的路径,因此是URI的有效部分。

所以基本上我想说的是没有错。

如果它给你带来了问题,那么一个解决方案是确定你所处的环境——例如

if($_SERVER['HTTP_HOST'] == 'www.ivankristianto.local') {
    $dev_env = TRUE;
}else {
    $dev_env = FALSE;
}

然后在某个地方使用它:

if($dev_env) {
    $_SERVER['REQUEST_URI'] = str_replace($_SERVER['HTTP_HOST'],'',$_SERVER['REQUEST_URI']);
}

更新

尝试将主机conf更改为:

<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>

(从ServerName中删除www.)

我终于让它工作起来了
以下是我所做的步骤(我不知道为什么它会受到影响,但它现在正在发挥作用)。

  1. 在examplep上安装PHP Fastcgi,我按照以下步骤操作:https://commaster.net/content/installing-php-fastcgi-and-zend-opcache-xampp-windows
  2. 我加载mod_fcgid,但我不使用php-cgi.exe处理程序
  3. 使用以下命令更新我的/etc/hosts文件并刷新dns ipconfig/flushdns
  4. 重新启动apache

它正在以某种方式发挥作用
老实说,我不知道为什么它有效,但如果有人遇到同样的问题,我希望这个解决方案可能会有所帮助。

最近也遇到了同样的问题,
我的解决方案:
首先检查您的http://localhost具有相同的效果。(我发现我没有)
如果没有,则将您的虚拟主机(域)添加到/etc/host文件中。

希望这会有所帮助。