【问题标题】:Codeigniter: removing index.php is only working with fewer uri segments. Why?Codeigniter:删除 index.php 仅适用于更少的 uri 段。为什么?
【发布时间】:2017-06-21 03:13:06
【问题描述】:

对于另一个关于在 CodeIgniter url 中删除 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';

还有其他设置对我发帖有帮助吗?

【问题讨论】:

  • 这是什么$route['(:any)'] = 'controller/index/$1'; ??这有意义吗?这也和默认控制器一样...
  • @AbdullaNilam 它在那里以便我可以加载localhost/project/page。如果没有该行,默认控制器会在localhost/project 加载主页,但我收到localhost/project/page 的404 错误。也许我可以在那里使用更好的东西,但如果我知道它是什么,我会使用它。有什么建议吗?

标签: php .htaccess codeigniter mod-rewrite routing


【解决方案1】:

使用这个.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

【讨论】:

  • 感谢您的建议。不幸的是,当我将它用于我的 .htaccess 文件时,我仍然遇到同样的问题。
  • 你的基本网址是什么?
  • 我不是 100% 确定这是您正在寻找的答案,但希望它会有所帮助...我相信我的基本网址是 localhost/northern(我一直在调用 @987654323 @ 迄今为止)。我的项目位于 ~/Repositories/northern/ 该目录包含我的 CodeIgniter application/ 和 public/ 目录。公共目录包含运行 CodeIgniter 的 index.php 文件。公共目录从 /opt/lamp/htdocs/northern 符号链接。 /opt/lamp/htdocs 是我的网络服务器根目录。
  • 复制 config.php 文件中的基本 URL 行。 当您添加代码开始和结束单词时,请添加此 ` 符号。
  • 好吧,你说一个 URL 不起作用。你能在你的项目上添加那个特定的 URL
【解决方案2】:

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

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

这对我来说看起来很乱,但它解决了我的问题。我不知道我是否只是为将来制造问题。

【讨论】:

  • 这绝对不是这样做的方法,您可以不受限制地访问您的整个项目...路由存在是有原因的
  • 好点,@BrianRamsey。我会记住的。在我的例子中,我设计了控制器来抛出一个404,如果它得到了$1和有时$2的意外输入,所以也许我是有效地手动路由,这对我来说可能不是最好的事情要么。
  • 我强烈建议确保您的系统和应用程序文件夹在您的文档根目录之外,我通常将它们放入一个“公共”文件夹(包含 index.php 和我的所有资产),以这种方式打开路由做任何恶意的人不能真正得到任何东西。
猜你喜欢
  • 2020-07-08
  • 2013-12-12
  • 2014-07-07
  • 1970-01-01
  • 2011-07-09
  • 1970-01-01
  • 1970-01-01
  • 2013-12-14
  • 2012-10-30
相关资源
最近更新 更多