我有一个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中。