2

我的 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 中。

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

你能指出我出了什么问题吗?

谢谢。
伊万

4

3 回答 3

3

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

没有虚拟主机:

/ivankristianto/request.php 

使用虚拟主机:

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

http://www.ivankristianto.local- 我认为这对您来说似乎是错误的,因为它包含http://www-.local您可以将其更改为 justinvankristano并且您的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.)

于 2014-10-05T09:28:26.417 回答
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 更新我的 /etc/hosts 文件并刷新 dns
  4. 重启阿帕奇

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

于 2014-10-07T15:03:21.557 回答
0

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

希望这会有所帮助。

于 2015-09-12T08:13:24.480 回答