CodeIgniter 控制器无法访问

Posted

技术标签:

【中文标题】CodeIgniter 控制器无法访问【英文标题】:CodeIgniter controllers unreachable 【发布时间】:2016-06-12 01:12:55 【问题描述】:

我使用 Xampp 和 CodeIgniter 开发了一个 Web 应用程序。处理干净路由的最佳方法是将 VirtualHost 设置为指向 xampp/apache/conf/httpd.conf 中包含项目的文件夹,然后在 route.php 文件中使用路由路由,例如,

$route['page1'] = "Page1Controller/page1Function";

我使用这样的 href 或标题,使用 root 作为基本文件夹:

href="/page1"

所有这些都在本地运行良好,我从不使用base_url() 或类似的功能。

切换到生产服务器,我显然没有任何权限,除了我的个人文件夹和子文件夹,所以当我执行它时,根文件夹成为所有域的根,而不仅仅是我的项目文件夹。

我尝试了base_url(),但它不起作用,找不到页面,即使不使用$route

有没有办法在不重构代码中的所有链接的情况下处理这个问题,或者重构的方法是什么?

编辑

我现在使用"./page1" 来访问index.php 文件夹的位置,而不是使用"/page1"。但是,我仍然无法使用 php 或 html/js 访问其他页面。

【问题讨论】:

你能分享你的.htaccess文件吗?顺便问一下主页是否有效? 确保控制器名称以大写字母开头,例如“home.php”应命名为“Home.php”并将base_url()留空。 @Dray 我已经做到了,谢谢。我将编辑我的问题 @TarasBudzyn 是的主页有效。对于 .htaccess,我使用标准重写规则来删除 index.php: RewriteEngine on RewriteCond %REQUEST_FILENAME !-f RewriteCond %REQUEST_FILENAME !-d RewriteRule ^(.*)$ /index.php/ $1 [L] 试试这个:<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %REQUEST_FILENAME !-f RewriteCond %REQUEST_FILENAME !-d RewriteRule ^(.*)$ index.php/$1 [L] </IfModule> 【参考方案1】:

假设路由在本地运行,以下是我为使其适应生产服务器而采取的步骤。

1 - 控制器和视图的首字母大写

CodeIgniter 要求在命名控制器和视图时使用大写字母,因此即使路由在 Windows 上运行,Linux 区分大小写也需要在类标题和 routes.php 文件中的引用中正确命名.

2 - 使用 './' 代替 '/'

由于应用程序的部署发生在子域中,因此根对应于域本身,而不是 index.php 所在的子域,并且可以通过'./' (cf. SO question) 访问。

3 - .htaccess 文件中的硬编码子域路径

在doc 之后,我执行了更正标准 .htaccess 文件的步骤,以使其与服务器上的子目录一起使用。标准变体只是从这条规则中删除'/'

RewriteRule ^(.*)$ /index.php/$1 [L]

导致

RewriteRule ^(.*)$ index.php/$1 [L]

但是,这在我的服务器上还没有解决,我不得不硬编码路径:

如果您从子目录运行 EE,但它仍然无法运行 删除斜线后,您可能需要指定子目录 你的重写规则。例如,如果您的子文件夹名为 testing, 改变:

RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L]

收件人:

RewriteRule (.*?)index\.php/*(.*) testing/$1$2 [R=301,NE,L]

然后改变:

RewriteRule ^(.*)$ /index.php/$1 [L]

收件人:

RewriteRule ^(.*)$ testing/index.php/$1 [L]

【讨论】:

以上是关于CodeIgniter 控制器无法访问的主要内容,如果未能解决你的问题,请参考以下文章

没有登录会话,任何人都无法访问 codeigniter 4 中的控制器

无法访问codeigniter控制器中的uri段

Codeigniter 4:无法使用apache mode_rewrite访问页面

ajax成功函数中的codeigniter访问数据数组

Codeigniter 3 无法访问错误消息

无法在 Codeigniter 中删除 index.php