$ _SERVER [' REQUEST_URI']返回完整的网址而不是脚本路径

时间:2014-10-05 06:00:57

标签: php apache request-uri

由于$ _SERVER ['REQUEST_URI']返回脚本的完整网址而不是相对路径,因此我的PHP应用无效。

我的环境:
Windows 7 64位 XAMPP版本1.8.2
PHP版本5.4.16
Apache Version 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中设置它。

我花了几个小时才发现为什么会发生这种情况并且已经通过谷歌和本网站搜索,但找不到任何线索。

你能指出我的错误吗?

感谢。
伊万

3 个答案:

答案 0 :(得分:3)

我相信您已经获得了创建虚拟主机所需的效果:

虚拟主机:

/ivankristianto/request.php 

使用虚拟主机:

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

http://www.ivankristianto.local - 我认为这似乎不对,因为它包含http://www.local - 您可以将此更改为invankristano而您的REQUEST_URI会输出与没有虚拟主机时相同。它表示您的request.php的路径 - 您已在hosts文件中设置,因此是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']);
}

<强>更新

尝试将主机配置更改为:

<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 :(得分:0)

我终于明白了。
这是我做的步骤(我不知道为什么它会受影响,但它现在正在工作)。

  1. 在xampp上安装PHP Fastcgi,我按照以下步骤操作:https://commaster.net/content/installing-php-fastcgi-and-zend-opcache-xampp-windows
  2. 我加载了mod_fcgid,但我没有使用php-cgi.exe处理程序
  3. 使用此命令ipconfig / flushdns
  4. 更新我的/ etc / hosts文件并刷新dns
  5. 重启apache
  6. 它正在以某种方式工作。
    老实说,我不知道它为什么会起作用,但如果有人遇到同样的问题,我希望解决方案可能会有所帮助。

答案 2 :(得分:0)

最近有同样的问题,
我的解决方案:
首先检查一下你的http://localhost是否有相同的效果。(我看到我没有&#t; t)
如果没有,则将虚拟主机(域)添加到/ etc / host文件。

希望这有用。