Codeigniter:删除index.php仅适用于较少的uri段。为什么?

时间:2017-02-03 17:10:36

标签: php .htaccess codeigniter mod-rewrite routing

我为在CodeIgniter网址中删除 index.php 的另一个问题道歉。我在这里看了很多答案,但一直无法解决我的问题。

目前我已经设置了本地开发服务器,以便

  • http://localhost/project/index.php/controller/function/page
  • http://localhost/project/page

按预期加载页面

但是,如果我尝试加载page/subpage只有index.php的版本有效:

  • http://localhost/project/index.php/controller/function/page/subpage(作品)
  • http://localhost/project/page/subpage(没有工作)

第二个不会调用我的控制器,但会产生CodeIgniter 404错误页面。这让我怀疑问题出在我的.htaccess文件中,但我不知道。我不太了解.htaccess文件。

我的.htaccess文件包含

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L]enter code here

我尝试过各种各样的排列,人们已经在其他类似的问题上提出了建议,但没有任何效果,除了一个产生通用php 404页面而不是CodeIgniter的页面。

我可以采取哪些不同方式来加载http://localhost/project/page/subpage

我的routes.php文件包含:

$route['default_controller'] = 'Controller';
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;
$route['(:any)'] = 'controller/index/$1';

我的config.php文件包含:

$config['index_page'] = '';
$config['uri_protocol'] = 'REQUEST_URI';

是否还有其他有助于我发布的设置?

2 个答案:

答案 0 :(得分:0)

使用此.htaccess

RewriteEngine on
RewriteCond $1 !^(index\.php|assets|image|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L,QSA]

Read More on Codeigniter Documentation

答案 1 :(得分:0)

我找到的解决方案是将以下路由添加到config.php文件中:

$route['(:any)/(:any)'] = 'controller/index/$1/$2';

这看起来很麻烦,但它解决了我的问题。我不知道我是否只为未来创造了一个问题。