我有一个检测$_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。
感谢以这种方式提供的任何帮助。 ✌️
答案 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的错误日志以获取更多详细信息。