PHP$_SERVER["PATH_INFO"]不返回url中没有index.PHP的信息(htac


PHP $_SERVER["PATH_INFO"] not returning info without index.php in url (htaccess url rewriting)

我有一个php函数,它检测$_SERVER["PATH_INFO"],然后分解index.php之后的所有参数。并且所有的url都使用CCD_ 3重写。

这是供参考的代码:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

问题是我的重写和php函数在本地运行良好,但在我的测试环境服务器上,如果我的url中没有index.php,该函数就不会返回$_SERVER["PATH_INFO"]

例如:

如果我转到example.com/index.php/this/is/a/test,函数会给我一个数组,如下所示:{this, is, a, test}

但如果我转到CCD_ 8,则重写到CCD_。

我已经在这里看到了答案,但我认为这更多的是服务器配置问题。该服务器目前运行在CentOS上,具有OVH RELEASE 3配置(类似于cPanel、ISP配置(。web包是Apache2和php5。

感谢您的帮助。✌️

PATH_INFO显示脚本名称后面的部分。

当请求是/this/is/a/test时,没有脚本,因此没有PATH_INFO

您可以使用REQUEST_URI(在第一种情况下包括index.php(来解决此问题,或者添加一个显式查询字符串,例如

RewriteRule ^(.*)$ index.php?path=$1 [L,QSA]

更新

事实证明,我错了。我终于用一个最小的脚本测试了这个

<?php
echo "PATH_INFO=", $_SERVER['PATH_INFO'];

并且其显示具有CCD_ 15或仅具有/test的PATH_。这是在标准安装的Ubuntu 16.04系统上。

因此,要了解实际情况,必须查看Apache的错误日志以了解更多详细信息。

实际上,我不知道为什么Linux环境中的apache2服务器会出现这种情况(我也面临同样的问题(。据我所知,您的代码在没有使用";index.php";像http://www.yourdomain.com/login/一样写在你的URL上,但不能像http://127.0.0.1/login/一样工作,应该像http://127.0.0.1/index.php/login一样工作,用于带有.htaccess.的MVC架构

您可以在测试环境中通过在测试环境位置使用内置的PHP服务器来克服这种情况。对于noobs,如果你打开你的终端上的位置"/var/www/html/";并且键入CCD_ 20,则服务器将在地址CCD_。现在,使用相同的.htaccess重写URL将在不使用";index.php";在类似CCD_ 22的URL中。