当应用程序从Internet加载时,Codeigniter REQUEST_URI获取错误的值

时间:2017-08-03 13:00:39

标签: php apache codeigniter nginx url-routing

我已在Ubuntu 17.04服务器中安装了最新的Apache,PHP7和codeigniter。我已经为其分配了本地IP,让我们说 10.20.30.40
此codeigniter应用程序应在本地工作,也应该在外部工作(互联网)。 还有一个中间nginx服务器(我无法访问)将外部(Internet)的所有内容重定向到我的服务器,因此我使用xdebug进行了一些测试和调试:

本地

http://10.20.30.40/ciapp/index.php/test
工作正常

$_SERVER['REQUEST_URI'] = string '/ciapp/index.php/test'

来自互联网

http://www.subdomain.company.xxx/ciapp/index.php/test
不起作用(它会抛出codeigniter 404页面)

$_SERVER['REQUEST_URI'] = string '//ciapp/index.php/test'

(注意前面的双斜线)

另外,我已经测试了以下

http://10.20.30.40//ciapp/index.php/test
(请注意有意的双重斜线)没有工作,得到CI的404

我有什么可以用REQUEST_URI做的,所以它可以在外面工作吗?或许这是另一个问题......?

PS:配置在其他地方建议:

$config['base_url'] = $_SERVER['HTTP_HOST'] == '10.20.30.40' ? 'http://10.20.30.40/ciapp/' : 'http://www.subdomain.company.xxx/ciapp/'; 

2 个答案:

答案 0 :(得分:0)

尝试使用基本网址

$root = "http://".$_SERVER['HTTP_HOST'];
$root .= str_replace(basename($_SERVER['SCRIPT_NAME']),"",$_SERVER['SCRIPT_NAME']);
$config['base_url'] = "$root";

答案 1 :(得分:0)

最后通过设置uri_protocol = PATH_INFO

解决

文件: application / config / config.php

$config['base_url'] = $_SERVER['HTTP_HOST'] == '10.20.30.40' ? 'http://10.20.30.40/ci/' : 'http://www.subdomain.company.xxx/ciapp/'; 
$config['index_page'] = '';
$config['uri_protocol'] = 'PATH_INFO'; 

文件: .htaccess(从网址中删除index.php)

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

现在它在本地完美运行并从Internet加载