PHP $ _SERVER [“PATH_INFO”]没有在url中返回没有index.php的信息(htaccess url重写)

时间:2016-08-24 12:31:34

标签: php apache .htaccess mod-rewrite url-rewriting

我有一个检测$_SERVER["PATH_INFO"]的php函数,然后在index.php之后爆炸所有参数。并且所有网址都使用.htaccess重写。

以下是供参考的代码:

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

问题是我的重写和我的php函数在本地工作正常,但在我的测试环境服务器上,如果我的网址中没有$_SERVER["PATH_INFO"],该函数不会返回index.php

例如:

如果我转到example.com/index.php/this/is/a/test,该函数会给我一个这样的数组:{this, is, a, test}

但如果我转到example.com/this/is/a/test重写index.php,但我的功能没有给我任何东西。

我已经看到了答案here,但我认为这更像是服务器配置问题。服务器当前在CentOS上运行,具有OVH RELEASE 3配置(类似于cPanel,ISP Config)。 Web包是Apache2和php5。

感谢以这种方式提供的任何帮助。 ✌️

1 个答案:

答案 0 :(得分:2)

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'];

并显示带有index.php/test或仅/test的PATH_INFO。这是在带有标准安装的Ubuntu 16.04系统上。

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